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
हम्म। मुझे लगता है कि मुझे अपने समाधान से बेहतर यह पसंद है :) मैं भविष्य में ऐसा करना शुरू कर सकता हूं।
माइकल मिर जूल 8'11

@ गुडराडेन: यह ठीक काम करता है: jsfiddle.net/fnjncqhv । यदि यह आपके लिए काम नहीं करता है, तो आप एक अलग समस्या का सामना कर रहे हैं।
फेलिक्स क्लिंग

नहीं, यह नहीं है। jsfiddle.net/fnjncqhv/1 serializeArray () ऑब्जेक्ट्स की एक सरणी का निर्माण करते हैं, प्रत्येक ऑब्जेक्ट में एक एकल प्रॉपर्टी होती है, यदि आपके डेटा ऑब्जेक्ट में 1 से अधिक प्रॉपर्टी (जैसे आपके उदाहरण में) है, तो यह एक अमान्य ऑब्जेक्ट का उत्पादन करता है और इस पर बाध्य नहीं होगा। सर्वर साइड। कृपया समस्या को ठीक करने के लिए अपना उत्तर संपादित करें।
गुडराडेन

2
@ गुडराडाइन: कृपया मेरे जवाब को अपने उत्तर पर देखें। तुम गलत हो। serializeArrayआपको लगता है कि संरचना का उत्पादन नहीं करता है। मुझे यकीन नहीं है कि आप अपने डेमो के साथ क्या दिखाने की कोशिश कर रहे हैं। आप केवल सरणी की लंबाई के बारे में बता रहे हैं। अगर मेरा डेमो आपको मना नहीं करता है, तो कृपया दस्तावेज़ पर एक नज़र डालें ।
फेलिक्स क्लिंग

1
@FelixKling उस विफल क्षण के लिए क्षमा करें और स्पष्टीकरण के लिए धन्यवाद। क्या आपको पता नहीं था कि आपको वास्तव में प्रारूप की आवश्यकता है {name: 'your-paramater-name', value: 'your-पैरामीटर-value'}, हर पैरामीटर के लिए जिसे आप जोड़ना चाहते हैं।
गुडराडेन


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(){});

या यदि आप विधि serializeObject () जोड़ते हैं , तो आप निम्न कार्य कर सकते हैं

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

1
यह मूल रूप से एक सरणी उत्पन्न करेगा जो दिखता है [{name: 'wordlist'}, {value: wordlist}]। यह उस प्रारूप में नहीं है जिसे jQuery समझता है, इसलिए मुझे संदेह है कि यह वास्तव में काम करता है।
फेलिक्स क्लिंग

@FelixKling serializeArray () [{name1: 'value1'}, {name2: 'value2'}] का निर्माण करते हैं। यदि आपके पास कोई ऑब्जेक्ट डेटा {name3: 'value3', name4: 'value4'} है और इसे क्रम से सरणी में पुश करें। (), तो आपको [{name1: 'value1'}, {name2: value2 '}, { name3: 'value3', name4: 'value4'}]। सरणी में अंतिम ऑब्जेक्ट अमान्य है और आपको परिणाम नहीं मिलेगा।
गुडराडेन

" serializeArray()उपज [{name1: 'value1'}, {name2: 'value2'}]।" नहीं, यह नहीं है: jsfiddle.net/akyz1Lcy
फेलिक्स क्लिंग

4

Jquery के नए संस्करण में, निम्नलिखित चरणों के माध्यम से इसे किया जा सकता है:

  • के माध्यम से परम सरणी प्राप्त करें serializeArray()
  • push()सरणी में अतिरिक्त परमर्स जोड़ने के लिए कॉल या इसी तरह के तरीके,
  • $.param(arr)क्रमबद्ध स्ट्रिंग प्राप्त करने के लिए कॉल करें , जिसे jquery ajax के 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 अनुरोध भेजने से पहले सही सेट करेंगे।

एक और संभावना इस छोटे रत्न का उपयोग करके अपने फॉर्म को एक जावास्क्रिप्ट ऑब्जेक्ट (स्ट्रिंग के बजाय) में क्रमबद्ध करने और लापता डेटा को जोड़ने में है:

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!'
      })
    });
  }
});

यदि आप ऊपर से नहीं देख सकते हैं तो मैंने .concat फ़ंक्शन का उपयोग किया है और पोस्ट चर के साथ एक ऑब्जेक्ट में 'नाम' और 'वैल्यू' के रूप में वैल्यू के साथ पास हुआ है!

उम्मीद है की यह मदद करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.