2012-06-08 10 views
24

का उपयोग कर JSON ऑब्जेक्ट भेजें, मैं जीईटी विधि का उपयोग कर एक जेसन ऑब्जेक्ट भेजने की कोशिश कर रहा हूं। मेरे कोड:JQuery, जीईटी विधि

$.ajax({ 
      url: "/api/endpoint", 
      type: "GET", 
      data: {"sort":"date"}, 
      contentType: "application/json", 
      dataType: "json", 
      ... 

हालांकि, शीर्षलेख प्राप्त "सामग्री-लंबाई" शून्य करने के लिए निर्धारित किया है, सर्वर पर इसलिए मेरी JSON पार्सर सामग्री को पढ़ने नहीं है।

मैं पहले से ही सामग्री की लंबाई शीर्ष लेख की स्थापना की कोशिश की है, लेकिन यह अभी भी शून्य के रूप में सर्वर की बात आती है:

$.ajax({ 
      url: "/api/endpoint", 
      headers: {"CONTENT_LENGTH",JSON.stringify({"sort":"date"}).length}, 
      type: "GET", 
      data: {"sort":"date"}, 
      contentType: "application/json", 
      dataType: "json", 
      ... 

किसी भी विचार कैसे इस काम कर पाने के लिए? इसे अनुरोध प्राप्त करना है।

+0

GET अनुरोध नहीं सामग्री ??? – Bergi

+0

सामग्री-लंबाई अप्रासंगिक है क्योंकि आप किसी शरीर के साथ अनुरोध नहीं कर रहे हैं। आप अनुरोध कैसे पढ़ रहे हैं? – Esailija

+3

क्या आपने जांच की है कि आपका अनुरोध कैसा दिखता है (उदाहरण के लिए फायरबग - नेट टैब में)? – Dusan

उत्तर

27

अनुरोध प्राप्त करें (at least usually) संदेश संदेश नहीं है। जैसा कि the docs में बताया गया है, jQuery यूआरएल पैरामीटर के जीईटी अनुरोधों के data को जोड़ता है। आपको अपने सर्वर एप्लिकेशन के साथ वहां से sort पैरामीटर पढ़ने में सक्षम होना चाहिए।

बीटीडब्ल्यू, कोई उपयोगकर्ता एजेंट आपको Content-Length हेडर सेट करने की अनुमति देगा - यह भेजे गए डेटा के आधार पर स्वचालित रूप से (और आवश्यक) किया जाएगा।

4

मुझे लगता है कि आप इस तरह से URL में GET पैरामीटर के लिए JSON.stringify उपयोग करना चाहिए:

$.ajax({ 
      url: "/api/endpoint?parameters="+JSON.stringify({"sort":"date"}), 
      type: "GET", 
      contentType: "application/json", 
      dataType: "json", 
      ... 
+3

-1: JSON.stringify में '&' हो सकता है जो अनुरोध को तोड़ देगा। इसके अलावा, क्यों सामग्री टाइप करें? – SuperSaiyan

+3

मैंने कोशिश की और सामग्री का उपयोग टाइप: "एप्लिकेशन/जेसन", डेटा टाइप: "जेसन", जब आप json.stringify() का उपयोग कर रहे हैं तो चीजें तोड़ती हैं, उन्हें बाहर ले जाती हैं और उछालती हैं, यह काम करती है। – ragebunny

3

Bergi से उल्लेख किया है, डेटा jQuery.ajax() से बदल जाती है मापदंडों अनुरोध करने के लिए। jQuery से 1.7.2:

// Determine if request has content 
s.hasContent = !rnoContent.test(s.type); --> false when s.type == "GET' 

...

if (!s.hasContent) { 
    // If data is available, append data to url 
    if (s.data) { 
     s.url += (rquery.test(s.url) ? "&" : "?") + s.data; 
     // #9682: remove data so that it's not used in an eventual retry 
     delete s.data; 
    } 
20

कुछ स्थानों पर जहां आप थोड़ा गड़बड़ हो सकती है।

  • यह CONTENT_LENGTH नहीं है, इसकी Content-Length है।
  • Content-Length हेडर सेट न करें, ब्राउज़र आपके लिए यह करेगा।
  • प्राप्त अनुरोध सामग्री-लंबाई = 0.

कुछ नीचे की तरह आप के लिए काम करना चाहिए है:

$.ajax({ 
    url: "/api/endpoint?parameters="+encodeURIComponent(JSON.stringify({"sort":"date"})), 
    type: "GET", 
    ... 
}); 
संबंधित मुद्दे