2012-06-08 64 views
24

我想使用GET方法發送json對象。我的代碼:JQuery,使用GET方法發送JSON對象

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

然而,收到的標頭「內容長度」設定爲零,在服務器上,因此我的JSON解析器不閱讀的內容。

我已經嘗試設置內容長度頭,但它仍然涉及到服務器是0:

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

任何想法如何得到這個工作?它必須是GET請求。

+0

GET請求沒有內容??? – Bergi

+0

內容長度無關緊要,因爲您沒有向身體發出請求。你如何閱讀請求? – Esailija

+3

你是否檢查過你的請求的樣子(例如在Firebug - Net標籤中)? – Dusan

回答

27

GET請求(at least usually)沒有消息正文。如the docs所述,jQuery將data GET請求附加到url參數。您應該能夠從您的服務器應用程序中讀取您的sort參數。

順便說一句,沒有用戶代理將允許您設置Content-Length標題 - 它將(必須)根據發送的數據自動完成。

4

我認爲你應該在URL中使用JSON.stringify爲GET參數是這樣的:

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

-1:JSON.stringify可能有一個'&'會破壞請求。另外,爲什麼contentType? – SuperSaiyan

+3

我試過這個,使用contentType:「application/json」,dataType:「json」,當你使用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標題,瀏覽器會爲你做。
  • Get請求包含內容長度= 0

類似下面的應該爲你工作:

$.ajax({ 
    url: "/api/endpoint?parameters="+encodeURIComponent(JSON.stringify({"sort":"date"})), 
    type: "GET", 
    ... 
}); 
相關問題