$ (यह) .serialize () - मान कैसे जोड़ें?


105

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

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

यह ठीक काम करता है, हालांकि मैं डेटा के लिए एक मूल्य जोड़ना चाहूंगा, इसलिए मैंने कोशिश की

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

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


क्या आप स्पष्ट कर सकते हैं कि "क्या सही ढंग से पोस्ट नहीं किया" का मतलब है? क्या हुआ? सर्वर द्वारा क्या प्राप्त किया गया था?
मैट बी

6
ऐसा नहीं होना चाहिए '&NonFormValue=' + NonFormValue?
वेस्ले मर्च

जवाबों:


103

के बजाय

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

आप शायद चाहते हैं

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

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


1
encodeURIComponentयह सुनिश्चित करने के लिए उपयोग करें कि NonFormValueइसमें कोई विशेष वर्ण नहीं है
याह्या उद्दीन

197

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

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

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

5
यह इसे करने का सबसे अच्छा तरीका है, स्ट्रिंग्स के साथ नहीं खेलना
ब्रेट ग्रेगसन

यह स्वीकृत उत्तर होना चाहिए। साफ और सही तरीका
माइक एरोन

7

पहले नहीं करना चाहिए

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

होना

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

और दूसरा आप उपयोग कर सकते हैं

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

या यदि कार्रवाई में पहले से ही कोई पैरामीटर है

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

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

6

पहले आइटम जोड़ें और फिर क्रमबद्ध करें:

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

1
मेरे लिए भी काम नहीं किया। हालांकि यह वस्तु का विस्तार करता है लेकिन उम्मीद के मुताबिक काम नहीं किया।
सज़ा

5

मत भूलना तुम हमेशा कर सकते हैं:

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

आपके वास्तविक रूप में, जो केस के आधार पर आपके कोड के लिए बेहतर हो सकता है।


2

हम ऐसा कर सकते हैं:

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

0

प्रपत्र डेटा को संसाधित करने के लिए आप एक अतिरिक्त फ़ंक्शन लिख सकते हैं और आपको अपने गैर-डेटा को फ़ॉर्म में डेटा मान के रूप में जोड़ना चाहिए। उदाहरण के लिए:

<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: [$(this).serialize(),$.param({NonFormValue: NonFormValue})].join('&')

कृपया अधिक विस्तृत विवरण जोड़ें क्योंकि यह एक बेहतर दृष्टिकोण क्यों है।
मार्क

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