সিরিয়ালাইজ এবং অতিরিক্ত ডেটা সহ jQuery পোস্ট ()


147

আমি serialize()ফর্মের বাইরে থাকা এবং অন্যান্য ডেটা পোস্ট করা সম্ভব কিনা তা জানার চেষ্টা করছি ।

আমি যা ভেবেছিলাম তা এখানে কাজ করবে তবে এটি কেবল 'wordlist'ফর্ম ডেটা প্রেরণ করে না।

$.post("page.php",( $('#myForm').serialize(), { 'wordlist': wordlist }));

কারো কি কোন ধারনা আছে?

উত্তর:


329

আপনি serializeArray [ডক্স] ব্যবহার করতে এবং অতিরিক্ত ডেটা যুক্ত করতে পারেন :

var data = $('#myForm').serializeArray();
data.push({name: 'wordlist', value: wordlist});

$.post("page.php", data);

11
হুম। আমি মনে করি এটি আমার সমাধানের চেয়ে ভাল আমি পছন্দ করি :) ভবিষ্যতে আমি এটি করা শুরু করতে পারি।
মাইকেল মায়ার

@ গুড্রাডাইন: এটি ঠিক কাজ করে: jsfiddle.net/fnjncqhv । যদি এটি আপনার পক্ষে কাজ করে না, আপনি একটি ভিন্ন সমস্যার মুখোমুখি হচ্ছেন।
ফেলিক্স ক্লিং

না এটা হয় না। jsfiddle.net/fnjncqhv/1 সিরিয়ালাইজ অ্যারে () বস্তুর একটি অ্যারে উত্পাদন করে, প্রতিটি বস্তু একটি একক সম্পত্তি সম্বলিত থাকে, যদি আপনার ডেটা অবজেক্টে 1 টিরও বেশি সম্পত্তি থাকে (যেমন আপনার উদাহরণের মতো), এটি একটি অবৈধ অবজেক্ট তৈরি করে এবং আবদ্ধ হবে না সার্ভার পাশ। সমস্যার সমাধান করতে দয়া করে আপনার উত্তরটি সম্পাদনা করুন।
গুদ্রাদাইন

2
@ গুদ্রাদাইন: আপনার উত্তর সম্পর্কে আমার মন্তব্য দেখুন। আপনি ভুল. serializeArrayআপনি যে কাঠামোটি মনে করেন সেটি তৈরি করে না। আমি নিশ্চিত না যে আপনি আপনার ডেমো দিয়ে কী দেখানোর চেষ্টা করছেন। আপনি কেবল অ্যারের দৈর্ঘ্যটি সতর্ক করছেন। যদি আমার ডেমো আপনাকে বোঝায় না, দয়া করে ডকুমেন্টেশনটি দেখুন
ফেলিক্স ক্লিং

1
@ ফেলিক্সকলিং এই ব্যর্থ মুহুর্তের জন্য দুঃখিত এবং ব্যাখ্যাটির জন্য আপনাকে ধন্যবাদ। আপনি যে প্যারামিটারটি যুক্ত করতে চান তার জন্য আপনার প্রকৃতপক্ষে {নাম: 'আপনার-প্যারামিটার-নাম', মান: 'আপনার-প্যারামিটার-মান' need দরকার আছে তা বুঝতে পারেননি।
গুদ্রাদাইন


9

একটি বিকল্প সমাধান, যদি আপনাকে এজ্যাক্স ফাইল আপলোড করার প্রয়োজন হয় তবে:

var data = new FormData( $('#form')[0] ).append( 'name' , value );

বা এমনকি সহজ।

$('form').on('submit',function(e){

    e.preventDefault();
    var data = new FormData( this ).append('name', value );

    // ... your ajax code here ...

    return false;

});

5

আপনি যখন ফর্ম ডেটাতে একটি জাভাস্ক্রিপ্ট অবজেক্ট যুক্ত করতে চান, আপনি নিম্নলিখিত কোডটি ব্যবহার করতে পারেন

var data = {name1: 'value1', name2: 'value2'};
var postData = $('#my-form').serializeArray();
for (var key in data) {
    if (data.hasOwnProperty(key)) {
        postData.push({name:key, value:data[key]});
    }
}
$.post(url, postData, function(){});

অথবা আপনি যদি সিরিয়ালাইজ অবজেক্ট () পদ্ধতিটি যুক্ত করেন তবে আপনি নিম্নলিখিতটি করতে পারেন

var data = {name1: 'value1', name2: 'value2'};
var postData = $('#my-form').serializeObject();
$.extend(postData, data);
$.post(url, postData, function(){});

1
এটি মূলত এমন একটি অ্যারে তৈরি করবে যা দেখতে দেখতে [{name: 'wordlist'}, {value: wordlist}]। এটি jQuery বুঝতে পারে এমন ফর্ম্যাটে নয়, তাই আমি সন্দেহ করি যে এটি আসলে কাজ করে।
ফেলিক্স ক্লিং

@ ফেলিক্সক্লিং সিরিয়ালাইজ অ্যারে () উত্পাদন করে [{নাম 1: 'মান 1'}, {নাম 2: 'মান 2'}]। আপনার যদি কোনও অবজেক্ট ডেটা থাকে {name3: 'value3', name4: 'value4'} এবং এটি সিরিয়ালাইজ অ্যারে () থেকে অ্যারেতে ঠেকান, আপনি [{name1: 'value1'}, {name2: 'value2'}, { নাম 3: 'মান 3', নাম 4: 'মান 4'}]। অ্যারেতে শেষ অবজেক্টটি অবৈধ এবং আপনি ফলাফল পাবেন না।
গুদ্রাদাইন

" serializeArray()উত্পাদন [{name1: 'value1'}, {name2: 'value2'}]।" না, এটি করে না: jsfiddle.net/akyz1Lcy
ফেলিক্স ক্লিং

4

Jquery এর নতুন সংস্করণে এটি নিম্নলিখিত পদক্ষেপের মাধ্যমে করতে পারত:

  • পেরাম অ্যারে মাধ্যমে পেতে serializeArray()
  • push()অ্যারেতে অতিরিক্ত প্যারাম যুক্ত করতে কল বা অনুরূপ পদ্ধতিগুলি,
  • $.param(arr)সিরিয়ালযুক্ত স্ট্রিং পেতে কল করুন যা jquery আজাক্সের পরম হিসাবে ব্যবহৃত হতে পারে data

উদাহরণ কোড:

var paramArr = $("#loginForm").serializeArray();
paramArr.push( {name:'size', value:7} );
$.post("rest/account/login", $.param(paramArr), function(result) {
    // ...
}

3
$.ajax({    
    type: 'POST',  
    url: 'test.php',  
    data:$("#Test-form").serialize(),  
    dataType:'json',
     beforeSend:function(xhr, settings){
     settings.data += '&moreinfo=MoreData';
     },
    success:function(data){
            //  json response  
    },
    error: function(data) { 
        // if error occured
    }
    });

2

আপনার কাছে ফর্মটিতে গোপন ক্ষেত্র হিসাবে অতিরিক্ত ডেটা থাকতে পারে যা সম্পর্কিত মানগুলিতে AJAX অনুরোধ প্রেরণের আগে আপনি ঠিক সেট করবেন।

আরেকটি সম্ভাবনা আপনার ফর্মটিকে জাভাস্ক্রিপ্ট অবজেক্টে (স্ট্রিংয়ের পরিবর্তে) ক্রমিকায়িত করার জন্য এবং অনুপস্থিত ডেটা যুক্ত করতে এই ছোট্ট রত্ন ব্যবহার করে into

var data = $('#myForm').serializeObject();
// now add some additional stuff
data['wordlist'] = wordlist;
$.post('/page.php', data);

নাম নেই কোন বিদ্যমান ফাংশন serializeObject। আপনি যেখানে যে পেতে পারি?
জেরেমের


0

আমি অবজেক্টগুলিকে অবজেক্ট হিসাবে রাখতে চাই এবং কোনও পাগল টাইপ-শিফটিং না করি। এখানে আমার উপায়

var post_vars = $('#my-form').serializeArray();
$.ajax({
  url: '//site.com/script.php',
  method: 'POST',
  data: post_vars,
  complete: function() {
    $.ajax({
      url: '//site.com/script2.php',
      method: 'POST',
      data: post_vars.concat({
        name: 'EXTRA_VAR',
        value: 'WOW THIS WORKS!'
      })
    });
  }
});

আপনি যদি উপরে থেকে দেখতে না পান তবে আমি .কনক্যাট ফাংশনটি ব্যবহার করেছি এবং পোস্টের সাথে 'নাম' হিসাবে ভেরিয়েবল এবং 'মান' হিসাবে মান সহ একটি বস্তুতে পাস করেছি!

আশাকরি এটা সাহায্য করবে.

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.