我想用Zepto或Jquery中的$ .ajax發佈一個對象數組。兩人都表現出同樣的奇怪的錯誤,但我找不到我做錯了什麼。
當使用諸如'RestEasy'之類的測試客戶端發送數據時,數據會保存到服務器中,並且我可以看到請求在瀏覽器的網絡面板中變得不穩定,所以我相信JS是罪魁禍首。
如果我發送一個對象數組作爲POST的數據屬性,它們不會正確發送。
數據對象:
var postData = [
{ "id":"1", "name":"bob"}
, { "id":"2", "name":"jonas"}
]
請求:所看到在瀏覽器
$.ajax({
url: _saveDeviceUrl
, type: 'POST'
, contentType: 'application/json'
, dataType: 'json'
, data: postData
, success: _madeSave.bind(this)
//, processData: false //Doesn't help
});
請求正文:
"bob=undefined&jonas=undefined"
這可以通過使用$ .PARAM更直接看到jQuery和Zepto用來準備POST數據的方法。
$.param(
[
{ "id":"1", "name":"bob"}
, { "id":"2", "name":"jonas"}
]
)
// Output: "bob=undefined&jonas=undefined"
因此,這些庫對複雜的後期數據所做的準備似乎與我預期的不同。
我看到這個答案,但我不想發送數據作爲查詢參數,因爲我在發佈大量內容。 How do I send an array in an .ajax post using jQuery?
使用jQuery/Zepto通過POST發送多個對象的正確方法是什麼?使用$ .ajax({... data:JSON.stringify(postData)...})發送非損壞內容,但服務器不喜歡該格式。
更新: 好像JSON.stringify發送正確格式的內容。問題在於服務器端非常非常關注它想要的對象結構。如果我添加或刪除對象中的任何屬性,它將會使整個過程失敗,而不是使用匹配的屬性。這很不方便,因爲使用服務器發送的內容作爲視圖模型很好,但視圖模型會發生變化。 ...仍在努力尋找最佳解決方案。
您是否使用PHP接收這些數據?如果是的話,你可以嘗試使用[.serialize()](http://api.jquery.com/serialize/),但是你需要在變量名的末尾添加'[]'並且將它們作爲數組 –