2009-04-15 16 views
93

मैं उपर्युक्त विधि & का उपयोग कर रहा हूं यह यूआरएल में एक पैरामीटर के साथ अच्छी तरह से काम करता है।पोस्ट विधि के साथ डेटा भेजने, getJSON का उपयोग कैसे करें?

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

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

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

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

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

+4

'' में get' getJSON' का मतलब * उपयोग मिलता है * कुछ json मिलता है। –

+0

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

उत्तर

190

$ .getJSON() विधि HTTP प्राप्त करता है और पोस्ट नहीं करता है। हालांकि अगर एक एक HTML फ़ॉर्म की सामग्री भेज रहे हैं, तो आप से पोस्ट के लिए डेटा बनाने के लिए serialize विधि का उपयोग कर सकते हैं आप, $.post()

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

कि कॉल में, dataToBeSent उपयोग करने के लिए कुछ भी आप चाहते हैं हो सकता है की जरूरत है अपने प्रपत्र।

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

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

+1

असल में .getJSON() दो तरीकों से क्रॉस डोमेन पहुंच का समर्थन करता है। जेएसओएनपी, जो जीईटी या पोस्ट का उपयोग नहीं करता है लेकिन स्क्रिप्ट इंजेक्शन; लेकिन सीओआरएस - और। पोस्ट() भी सीओआरएस का समर्थन करता है। हालांकि सीओआरएस की आवश्यकता है कि सर्वर भी इसका समर्थन करे जबकि JSONP नहीं करता है। – hippietrail

+2

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

-8

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

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

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

मुझे लगता है कि यह पूछा गया है कि यह क्या जवाब दिया गया है। –

12

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

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

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

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

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

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

जिसमें "jsonp000000" कॉलबैक प्राप्त मूल्य है ।

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

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

PHP में तरह कार्यान्वयन किया जाएगा। फिर भी अधिक परीक्षण की जरूरत है।

+1

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

+0

आपने 'कॉलबैक' क्यों जोड़ा? यूआरएल में? इसने कॉलबैक को मेरे लिए नहीं बुलाया। मैंने 'JSON.stringify (डेटा) 'भी जोड़ा। +1, सहायक पोस्ट! –

+0

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

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 
    } 
1

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

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

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

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

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

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

के साथ 0 (36/0) $.getJSON बदलें और आनंद लें!

आप उसी जावास्क्रिप्ट कॉलबैक फ़ंक्शंस का उपयोग $.getJSON के साथ कर सकते हैं। कोई सर्वर-साइड परिवर्तन की आवश्यकता नहीं है। (ठीक है, मैं हमेशा PHP में $_REQUEST का उपयोग करने की सलाह देता हूं। http://php.net/manual/en/reserved.variables.request.php, Among $_REQUEST, $_GET and $_POST which one is the fastest?)

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

+0

यह किया गया() और असफल() विधियों के साथ काम नहीं करता है जिसे आप आमतौर पर getJSON पर लागू कर सकते हैं। – HackWeight

1

अगर मैं पोस्ट और एक प्रयोग किया है:

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