JQuery के अजाक्स कॉल के लिए कई पैरामीटर पास करें


99

मेरे पास aspx पेज में webmethod को कॉल करने के लिए निम्न jquery कोड है

$.ajax({
    type: "POST",
    url: "popup.aspx/GetJewellerAssets",
    contentType: "application/json; charset=utf-8",
    data: '{"jewellerId":' + filter + '}',
    dataType: "json",
    success: AjaxSucceeded,
    error: AjaxFailed
});

और यहाँ वेब विधि हस्ताक्षर है

[WebMethod]
public static string GetJewellerAssets(int jewellerId)
{

यह ठीक काम करता है।

लेकिन अब मुझे वेब विधि में दो मापदंडों को पारित करने की आवश्यकता है

नई वेब विधि इस तरह दिखती है

[WebMethod]
public static string GetJewellerAssets(int jewellerId, string locale)
{
}

इस नई पद्धति के हस्ताक्षर को सफलतापूर्वक कॉल करने के लिए मैं ग्राहक कोड कैसे बदलूं?

संपादित करें:

निम्नलिखित 2 वाक्य रचनाओं ने काम किया

data: '{ "jewellerId":' + filter + ', "locale":"en" }',

तथा

data: JSON.stringify({ jewellerId: filter, locale: locale }),

जहां फ़िल्टर और लोकल स्थानीय चर हैं


9
data: JSON.stringify({ jewellerId: filter, locale: locale })सबसे अच्छा तरीका है जो मुझे मिला, धन्यवाद @ChrisCa
फ्रैंक

यदि आप मेरी तरह एक दुखी आत्मा हैं, तो आप घंटों तक इस पर अटक सकते हैं। JSON.stringifyकिसी ऑब्जेक्ट शाब्दिक के साथ उपयोग करते समय , आप एक बृहदान्त्र के साथ पैरामीटर नाम शामिल करना चाहिए, सभी {}ब्रेसिज़ के अंदर लिपटे हुए हैं । का उपयोग कर JSON.stringify(objectLiteral)काम नहीं करता है।
कालेब एंडरसन

विधि हस्ताक्षर जैसे [WebMethod] [ScriptMethod(UseHttpGet = true)] public static string TestIBAN(string ccc)?
किकेनेट

जवाबों:


141

मापदंडों को पारित करने के लिए स्ट्रिंग समाकलन का उपयोग न करें, बस एक डेटा हैश का उपयोग करें:

$.ajax({
    type: 'POST',
    url: 'popup.aspx/GetJewellerAssets',
    contentType: 'application/json; charset=utf-8',
    data: { jewellerId: filter, locale: 'en-US' },
    dataType: 'json',
    success: AjaxSucceeded,
    error: AjaxFailed
});

अपडेट करें:

जैसा कि टिप्पणी अनुभाग में @Alex द्वारा सुझाया गया है, एक ASP.NET PageMethod मापदंडों को उम्मीद करता है कि JSON अनुरोध में इनकोड किया गया है, इसलिए JSON.stringifyइसे डेटा हैश पर लागू किया जाना चाहिए:

$.ajax({
    type: 'POST',
    url: 'popup.aspx/GetJewellerAssets',
    contentType: 'application/json; charset=utf-8',
    data: JSON.stringify({ jewellerId: filter, locale: 'en-US' }),
    dataType: 'json',
    success: AjaxSucceeded,
    error: AjaxFailed
});

12
JSON.stringify( myObject )यदि आप बाद में किसी कक्षा में अपने मापदंडों को समूह में लाना चाहते हैं, तो जावास्क्रिप्ट ऑब्जेक्ट से JSON स्ट्रिंग बनाने के लिए उपयोग करने पर भी विचार करें ।
एलेक्स बैगनोलिनी

1
जवाब के लिए धन्यवाद - हालांकि, मुझे एक http स्थिति 500 ​​मिलती है जब मैं इसे इस तरह से कोशिश करता हूं। कोई विचार? या इसे कैसे डीबग करें? वेब विधि में ब्रेकपॉइंट कभी भी हिट नहीं होता है
क्रिसका

1
नया कोड $ .ajax ({प्रकार: 'POST', url: 'popup.aspx / GetJewellerAssets', contentType: 'application / json; charset = utf-8', डेटा: {jewellerId: फ़िल्टर, लोकेल: 'en) के रूप में निम्नानुसार है। -US '}, डेटा टाइप: "json", सफलता: AjaxSucceeded, त्रुटि: AjaxFailed});
क्रिसका

1
डिबग करने के लिए, पहले फायरबग को देखें कि सर्वर की सटीक प्रतिक्रिया क्या है, फिर वेब सेवा पद्धति में एक विराम बिंदु डालें और देखें कि क्या यह पहुंच गया है।
डारिन दिमित्रोव

1
ब्रेकप्वाइंट वेब विधि में कभी नहीं मारा जाता है Firebug शो: "संदेश": "अमान्य JSON आदिम: jewellerId।" "StackTrace": "System.Web.Script.Serialization तो मैं पर json की वाक्य रचना लगता है कि वह सही नहीं है
ChrisCa

18
data: '{"jewellerId":"' + filter + '","locale":"' + locale + '"}',

1
यह काम किया: '{"jewellerId":' + फ़िल्टर + ', "लोकेल": "en"}, (जाहिर है कि मैं en पर लोकेल को हार्डकोड नहीं करूँगा, लेकिन यह सिंटैक्स है जिसने काम किया है।
क्रिसकॉन

यह मेरे लिए MVC 3 के साथ काम करता है। मुझे डारिन के काम करने का तरीका नहीं मिल सका है - शायद इसकी MVC 3 चीज।
फिएट

7

बस उतने ही गुण जोड़ें जितनी आपको डेटा ऑब्जेक्ट की आवश्यकता है।

 $.ajax({
                    type: "POST",
                    url: "popup.aspx/GetJewellerAssets",
                    contentType: "application/json; charset=utf-8",
                    data: {jewellerId: filter , foo: "bar", other: "otherValue"},
                    dataType: "json",
                    success: AjaxSucceeded,
                    error: AjaxFailed
                });

1
Webmethod हस्ताक्षर इस मामले dataमें सर्वर साइड पर गुणों को पढ़ने के लिए कैसा लगेगा ?
फ्लो

5

AJAX कॉल का उपयोग करके डेटा भेजने के लिए नीचे दी गई विधि का उपयोग न करें

data: '{"jewellerId":"' + filter + '","locale":"' + locale + '"}'

यदि गलती से उपयोगकर्ता विशेष चरित्र में प्रवेश करता है, जैसे एकल उद्धरण या डबल कोट ajax कॉल गलत स्ट्रिंग के कारण विफल हो जाता है।

बिना किसी समस्या के वेब सेवा को कॉल करने के लिए नीचे दी गई विधि का उपयोग करें

var parameter = {
       jewellerId: filter,
       locale : locale 
};


data: JSON.stringify(parameter)

उपरोक्त पैरामीटर में जावास्क्रिप्ट ऑब्जेक्ट का नाम है और इसे अजाक्स कॉल के डेटा विशेषता में पास करते समय इसे कड़ा कर दें।


3

क्या किसी और ने देखा है कि डेविड हेडलंड के अलावा सभी जवाबों में json string / object अमान्य है? :)

JSON ऑब्जेक्ट्स को निम्न तरीके से स्वरूपित किया जाना चाहिए: {"key": ("मान" | 0 | गलत)}। इसके अलावा, इसे स्ट्रिंग के रूप में लिखने से ऑब्जेक्ट को स्ट्रिंग करने की तुलना में बहुत कम आवश्यकता होती है ...


3
$.ajax({
    type: 'POST',
    url: 'popup.aspx/GetJewellerAssets',      
    data: "jewellerId=" + filter+ "&locale=" +  locale,  
    success: AjaxSucceeded,
    error: AjaxFailed
});

प्रकार का उपयोग करके भी कार्य करना : GET ?
किकेनेट

या आप jason.stringyfy (सरणी) में डेटा पास करने के लिए एक सरणी का उपयोग कर सकते हैं।
शेखर पटेल

1

बस [यह पूरी तरह से Asp.net में काम करने के लिए जोड़ने के लिए & जासन में वेब-नियंत्रण फ़ील्ड खोजें जैसे: <% Fieldname%>]

 data: "{LocationName:'" + document.getElementById('<%=txtLocationName.ClientID%>').value + "',AreaID:'" + document.getElementById('<%=DropDownArea.ClientID%>').value + "'}",

1
    var valueOfTextBox=$("#result").val();
    var valueOfSelectedCheckbox=$("#radio:checked").val();

    $.ajax({
    url: 'result.php',
    type: 'POST',
    data: { forValue: valueOfTextBox, check : valueOfSelectedCheckbox } ,
    beforeSend: function() {

          $("#loader").show();
       },
    success: function (response) {
       $("#loader").hide();
       $("#answer").text(response);
    },
    error: function () {
        //$("#loader").show();
        alert("error occured");
    }
    }); 

0

इसके सभी डेटा जो आप पास करते हैं; ठीक से स्वरूपित स्ट्रिंग है। यदि आप खाली डेटा पास कर रहे हैं तो डेटा: {} काम करेगा। हालांकि कई मापदंडों के साथ इसे ठीक से स्वरूपित किया जाना चाहिए

var dataParam = '{' + '"data1Variable": "' + data1Value+ '", "data2Variable": "' + data2Value+ '"' +  '}';

....

data: dataParam

...

समझने का सबसे अच्छा तरीका उचित संदेश पैरामीटर के साथ त्रुटि हैंडलर है, ताकि विस्तृत त्रुटियों को पता चल सके।


0

मैंने json का उपयोग करते हुए कई मापदंडों को सफलतापूर्वक पारित किया

data: "{'RecomendeeName':'" + document.getElementById('txtSearch').value + "'," + "'tempdata':'" +"myvalue" + "'}",

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