2011-06-30 5 views
69

वर्तमान में मैं निम्नलिखित है:

$.ajax({ 
    type: 'POST', 
    url: this.action, 
    data: $(this).serialize(), 
}); 

यह ठीक काम करता है, फिर भी मैं डेटा मान जोड़ना चाहते हैं, तो मैं

$.ajax({ 
    type: 'POST', 
    url: this.action, 
    data: $(this).serialize() + '&=NonFormValue' + NonFormValue, 
}); 

की कोशिश की लेकिन वह सही रूप से पोस्ट नहीं किया था। इस बात पर कोई विचार है कि आप धारावाहिक स्ट्रिंग में कोई आइटम कैसे जोड़ सकते हैं? यह एक वैश्विक पृष्ठ चर है जो विशिष्ट रूप से विशिष्ट नहीं है।

+0

आप क्या स्पष्ट कर सकते हैं कि "पोस्ट नहीं किए जा सही ढंग से" का अर्थ है? क्या हुआ?सर्वर द्वारा क्या प्राप्त किया गया था? –

+4

क्या यह '' और NonFormValue = '+ NonFormValue' नहीं होना चाहिए? –

उत्तर

67

के बजाय

data: $(this).serialize() + '&=NonFormValue' + NonFormValue, 

आप शायद चाहते

data: $(this).serialize() + '&NonFormValue=' + NonFormValue, 

आप URL एन्कोड NonFormValue के मूल्य के सावधान रहना चाहिए अगर इसमें कोई विशेष पात्र हो सकता है।

+0

'एनकोडोरिकॉम्पोनेंट' का उपयोग यह सुनिश्चित करने के लिए करें कि 'NonFormValue' में कोई विशेष वर्ण नहीं है –

6

पहला आइटम जोड़ें और फिर क्रमानुसार:

$.ajax({ 
    type: 'POST', 
    url: this.action, 
    data: $.extend($(this), {'NonFormValue': NonFormValue}).serialize() 
}); 
+2

यह मेरे लिए काम नहीं करता = [ – ThomasReggi

5

सबसे पहले नहीं

data: $(this).serialize() + '&=NonFormValue' + NonFormValue, 

data: $(this).serialize() + '&NonFormValue=' + NonFormValue, 

होना चाहिए और दूसरी आप

url: this.action + '?NonFormValue=' + NonFormValue, 

उपयोग कर सकते हैं या कार्रवाई पहले से ही किसी भी पैरामीटर शामिल करता है, तो

url: this.action + '&NonFormValue=' + NonFormValue, 
+0

आपका दूसरा उत्तर उसी प्रश्न के समान नहीं होगा जैसा प्रश्न पूछा गया था; 'NonFormValue' को URL पैरामीटर के रूप में भेजा जाएगा, पोस्ट किए गए डेटा में नहीं। यह आदर्श नहीं हो सकता है यदि ए) सर्वर पक्ष पर जो कुछ भी चल रहा है उसे उम्मीद है कि इसे पोस्ट किया जाए (उदाहरण के लिए Django में अनुरोध.REQUEST' के बजाय 'request.POST' का उपयोग करना), या बी)' NonFormValue' ऐसा कुछ नहीं है जो नहीं होना चाहिए यूआरएल बार या इतिहास में या तो सुरक्षा कारणों से या क्योंकि यह एक क्षणिक मूल्य है। –

132

जबकि मैट बी का जवाब काम करेगा, आप फॉर्म डेटा से सरणी प्राप्त करने के लिए .serializeArray() का उपयोग भी कर सकते हैं, इसे संशोधित कर सकते हैं और इसे jQuery.param() का उपयोग यूआरएल-एन्कोडेड रूप में रूपांतरित करने के लिए कर सकते हैं। इस तरह, jQuery आपके लिए आपके अतिरिक्त डेटा के क्रमबद्धीकरण को संभालता है।

<input type="hidden" name="NonFormName" value="NonFormValue" /> 

अपने वास्तविक रूप है, अपने कोड के मामले पर निर्भर करता है के लिए बेहतर हो सकता है, जिसमें:

var data = $(this).serializeArray(); // convert form to array 
data.push({name: "NonFormValue", value: NonFormValue}); 
$.ajax({ 
    type: 'POST', 
    url: this.action, 
    data: $.param(data), 
}); 
+11

यह निश्चित रूप से सबसे अच्छा विकल्प है - धारावाहिकरण को पूरी तरह से jQuery पर छोड़कर, जबकि अभी भी फ़ॉर्म से पुनर्प्राप्त किए गए लोगों को नए मान जोड़ने की क्षमता है। – jcsanyi

+4

यह करने का सबसे अच्छा तरीका है, स्ट्रिंग्स –

3

आप हमेशा कर सकते हैं मत भूलना।

+0

के साथ कोई खेल नहीं है निश्चित रूप से कोई अच्छा और सटीक विचार नहीं – user3284463

0

आप एक अतिरिक्त समारोह फ़ॉर्म डेटा को संसाधित करने के लिए लिख सकते हैं और आप form.seethe उदाहरण में डेटा valu के रूप में अपने nonform डेटा जोड़ना चाहिए:

<form method="POST" id="add-form"> 
    <div class="form-group required "> 
     <label for="key">Enter key</label> 
     <input type="text" name="key" id="key" data-nonformdata="hai"/> 
    </div> 
    <div class="form-group required "> 
     <label for="name">Ente Name</label> 
     <input type="text" name="name" id="name" data-nonformdata="hello"/> 
    </div> 
    <input type="submit" id="add-formdata-btn" value="submit"> 
</form> 

तब प्रपत्र प्रसंस्करण के लिए इस jQuery जोड़ने

<script> 
$(document).onready(function(){ 
    $('#add-form').submit(function(event){ 
     event.preventDefault(); 
     var formData = $("form").serializeArray(); 
     formData = processFormData(formData); 
     // write further code here----> 
    }); 
}); 
processFormData(formData) 
{ 
    var data = formData; 
    data.forEach(function(object){ 
     $('#add-form input').each(function(){ 
      if(this.name == object.name){ 
       var nonformData = $(this).data("nonformdata"); 
       formData.push({name:this.name,value:nonformData}); 
      } 
     }); 
    }); 
    return formData; 
} 

0

हम क्या कर सकते हैं की तरह:

data = $form.serialize() + "&foo=bar"; 

उदाहरण के लिए:

var userData = localStorage.getItem("userFormSerializeData"); 
var userId = localStorage.getItem("userId"); 

$.ajax({ 
    type: "POST", 
    url: postUrl, 
    data: $(form).serialize() + "&" + userData + "&userId=" + userId, 
    dataType: 'json', 
    success: function (response) { 
     //do something 
    } 
}); 
संबंधित मुद्दे