2011-06-06 502 views
13

我已經搜索了一段時間,只能找到processData:false的用處。我找不到遇到過這個問題的人。jQuery Ajax - 將processData設置爲false打破了我的AJAX請求

我將JSON傳遞迴服務器,並且不希望jquery自動將數據轉換爲查詢字符串,因此我將pr​​ocessData設置爲false。如果我取出processData,我可以看到請求開火,但是一旦我放入,我就看不到任何請求(使用Firebug & Chrome開發工具)。

$.ajax({ 
      url: myUrl, 
      type: "POST", 
      data: {foo: "bar"}, 
      processData: false, 
      contentType: 'application/json' 
     }); 

我最初做是有點比這更復雜,但我已經簡化它,試圖縮小問題,但這個簡單的代碼無法正常工作或(再次,它的工作,如果該請求我註釋掉processData)。另外,我在控制檯中沒有看到任何Javascript錯誤。

任何幫助將不勝感激!

編輯對於未來的Google員工:正如寂寞天指出的,如果您提供JS對象或格式不正確的JSON字符串,jQuery不會拋出任何錯誤。它根本不會觸發請求。

回答

13

您想將數據作爲JSON傳遞。你正在傳遞一個Javascript對象。 JSON是一種將JavaScript對象序列化爲字符串的方式,以便它們可以在沒有兼容性問題的情況下傳遞。

實際上,你想通過JSON字符串中的:

$.ajax({ 
    url: myUrl, 
    type: "POST", 
    data: '{"foo": "bar"}', 
    processData: false, 
    contentType: 'application/json' 
}); 
+0

非常感謝!我意識到我最初發送的更復雜的數據也格式不正確。有趣的是,jQuery在嘗試解析錯誤的JSON字符串時不會引發任何錯誤。 – paz 2011-06-06 14:34:11

+3

自從這篇文章已經有一段時間了,但我想添加到@lonesomday,如果你想避免把''手工放在每個屬性/值你可以做JSON.stringify(),就這些了。 – vsm 2011-11-27 03:04:10

+6

但是,processData還能做什麼? – getsetbro 2014-09-18 18:26:32

5

其實,processData默認假定data傳遞是一個對象,並且將其作爲application/x-www-form-urlencoded

總結一切由@lonesomeday@vsm上面說要送生JSON(什麼是從表單數據不同),你需要:

$.ajax({ 
    url: 'http://here-i.am/send-me/an/angel', // Determining far end 
    data: JSON.stringify({foo: "bar"}), // Obtaining proper JSON string from data object 
    processData: false, // Preventing default data parse behavior 
    contentType: "application/json" // Setting proper `ContentType` for our data 
    ... 
});