GetJSON का उपयोग कैसे करें, पोस्ट विधि के साथ डेटा भेज रहे हैं?


107

मैं उपरोक्त विधि का उपयोग कर रहा हूं और यह URL में एक पैरामीटर के साथ अच्छी तरह से काम करता है।

उदाहरण के लिए Students/getstud/1जहां नियंत्रक / कार्रवाई / पैरामीटर प्रारूप लागू किया जाता है।

अब मेरे पास छात्रों के नियंत्रक में एक क्रिया है जो दो मापदंडों को स्वीकार करती है और JSON ऑब्जेक्ट लौटाती है।

तो मैं $.getJSON()पोस्ट विधि का उपयोग करके डेटा कैसे पोस्ट करूं?

इसी तरह के तरीके भी स्वीकार्य हैं।

बिंदु AJAX के साथ नियंत्रक की एक कार्रवाई को कॉल करना है।


4
getका getJSONअर्थ है कुछ जसन प्राप्त करने के लिए GET का उपयोग करें
माजिद फौलादपुर

1
@ माजिद फौलादपुर जब मैंने यह सवाल पूछा, तो मुझे पता नहीं था कि ..!
विकास

जवाबों:


216

$ .GetJSON () विधि HTTP GET करती है और POST नहीं। आपको $ .post () का उपयोग करने की आवश्यकता है

$.post(url, dataToBeSent, function(data, textStatus) {
  //data contains the JSON object
  //textStatus contains the status: success, error, etc
}, "json");

उस कॉल में, dataToBeSentआप जो चाहें कर सकते हैं, हालाँकि अगर आप html फॉर्म की सामग्री भेज रहे हैं, तो आप अपने फॉर्म से POST के लिए डेटा बनाने के लिए क्रमबद्ध विधि का उपयोग कर सकते हैं ।

var dataToBeSent = $("form").serialize();

7
बस उस $ .getJSON समर्थन को जोड़ना चाहते हैं Jsonp (क्रॉस डोमेन एक्सेस) दुर्भाग्य से $ .post नहीं।
टॉमस

2
वास्तव में .getJSON () दो तरीकों से क्रॉस डोमेन एक्सेस का समर्थन करता है। JSONP, जो GET या POST का उपयोग नहीं करता है, लेकिन स्क्रिप्ट इंजेक्शन; लेकिन यह भी CORS - और .post () भी CORS का समर्थन करता है। हालाँकि कॉर्स के लिए आवश्यक है कि सर्वर भी इसका समर्थन करे जबकि JSONP नहीं करता है।
हिप्पिट्रैसिल

2
सच नहीं है, JSONP को कॉलबैक पैरामीटर को पार्स करने के लिए सर्वर समर्थन की भी आवश्यकता होती है।
श्रूलिक

जब मैं उपरोक्त फ़ंक्शन का उपयोग कर रहा हूं, तो मुझे एक json ऑब्जेक्ट के बजाय एक स्ट्रिंग ऑब्जेक्ट प्राप्त हो रहा है।
प्रतीक सिंघल

13

यह मेरा "एक-पंक्ति" समाधान है:

$.postJSON = function(url, data, func) { $.post(url+(url.indexOf("?") == -1 ? "?" : "&")+"callback=?", data, func, "json"); }

Jsonp, और POST विधि का उपयोग करने के लिए, यह फ़ंक्शन URL में "कॉलबैक" GET पैरामीटर जोड़ता है। यह इसका उपयोग करने का तरीका है:

$.postJSON("http://example.com/json.php",{ id : 287 }, function (data) {
   console.log(data.name);
});

सर्वर को कॉलबैक GET पैरामीटर को संभालने के लिए तैयार किया जाना चाहिए और json स्ट्रिंग को इस प्रकार वापस करना चाहिए:

jsonp000000 ({"name":"John", "age": 25});

जिसमें "jsonp000000" कॉलबैक GET मान है।

PHP में कार्यान्वयन इस तरह होगा:

print_r($_GET['callback']."(".json_encode($myarr).");");

मैंने कुछ क्रॉस-डोमेन परीक्षण किए और यह काम करने लगता है। हालांकि अभी और परीक्षण की आवश्यकता है।


1
यह कभी भी जीईटी की सीमा को दरकिनार नहीं करेगा जबकि POST का अधिकतम आकार फिर से परिभाषित किया जा सकता है।
दमनक

आपने क्यों जोड़ा ?callback? url में इसने कॉलबैक को मेरे लिए नहीं बुलाया। मैंने भी जोड़ा JSON.stringify(data)। +1, सहायक पोस्ट!
Ionică Bizău

@ IonicăBizău: धन्यवाद। किसी ऑब्जेक्ट को वापस करने के लिए, हमें URL में "कॉलबैक" पैरामीटर जोड़ना होगा और सर्वर को उसी ऑब्जेक्ट नाम को JQuery से वापस करने की आवश्यकता होगी। मैं getJSON () के लिए एक ओवरराइड फ़ंक्शन का उपयोग भी करता हूं:jQuery.getJSON = function(url, data, func) { return $.get(url+(url.indexOf("?") == -1 ? "?" : "&")+"callback=?", data, func, "json"); }
lep

7

बस इन पंक्तियों को अपने साथ जोड़ें <script>(कहीं jQuery लोड होने के बाद लेकिन कुछ भी पोस्ट करने से पहले):

$.postJSON = function(url, data, func)
{
    $.post(url, data, func, 'json');
}

(कुछ / सभी) की जगह $.getJSONके साथ $.postJSONऔर आनंद लें!

आप के रूप में एक ही जावास्क्रिप्ट कॉलबैक कार्यों का उपयोग कर सकते हैं $.getJSON। सर्वर-साइड परिवर्तन की आवश्यकता नहीं है। (खैर, मैं हमेशा $_REQUESTPHP में उपयोग करने की सलाह देता हूं । http://php.net/manual/en/reserved.variables.request.php , $ _REQUEST, $ _GET और $ _POST में से कौन सा सबसे तेज़ है? )

यह @ लेप के समाधान से सरल है।


यह किए गए () और विफल () विधियों के साथ काम नहीं किया है जो आप सामान्य रूप से getJSON पर लागू कर सकते हैं।
हैक वाइट

3

मेरे पास कोड था जो getJSON कर रहा था। मैंने बस इसे पोस्ट के साथ बदल दिया। मेरे आश्चर्य करने के लिए, यह काम किया

   $.post("@Url.Action("Command")", { id: id, xml: xml })
      .done(function (response) {
           // stuff
        })
        .fail(function (jqxhr, textStatus, error) {
           // stuff
        });



    [HttpPost]
    public JsonResult Command(int id, string xml)
    {
          // stuff
    } 

3

मैंने सिर्फ पोस्ट और एक का उपयोग किया है:

data = getDataObjectByForm(form);
var jqxhr = $.post(url, data, function(){}, 'json')
    .done(function (response) {
        if (response instanceof Object)
            var json = response;
        else
            var json = $.parseJSON(response);
        // console.log(response);
        // console.log(json);
        jsonToDom(json);
        if (json.reload != undefined && json.reload)
            location.reload();
        $("body").delay(1000).css("cursor", "default");
    })
    .fail(function (jqxhr, textStatus, error) {
        var err = textStatus + ", " + error;
        console.log("Request Failed: " + err);
        alert("Fehler!");
    });

1

$.getJSON()AJAX अनुरोध भेजने और प्रतिक्रिया के रूप में JSON डेटा प्राप्त करने के लिए बहुत आसान है। काश, jQuery प्रलेखन में एक बहन फ़ंक्शन का अभाव होता है जिसे नाम दिया जाना चाहिए $.postJSON()। सिर्फ उपयोग क्यों नहीं$.getJSON() इसके साथ और किया जाए? खैर, शायद आप बड़ी मात्रा में डेटा भेजना चाहते हैं या, मेरे मामले में, IE7 सिर्फ GET अनुरोध के साथ ठीक से काम नहीं करना चाहता है।

यह सच है, वर्तमान में कोई $.postJSON()विधि नहीं है, लेकिन आप $.post()फ़ंक्शन में चौथे पैरामीटर (प्रकार) को निर्दिष्ट करके एक ही चीज़ को पूरा कर सकते हैं :

मेरा कोड इस तरह देखा:

$.post('script.php', data, function(response) {
  // Do something with the request
}, 'json');

-8

यदि आपके पास सिर्फ दो पैरामीटर हैं, तो आप ऐसा कर सकते हैं:

$.getJSON('/url-you-are-posting-to',data,function(result){

    //do something useful with returned result//
    result.variable-in-result;
});

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