我想在 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"
这可以通过使用 jQuery 和 Zepto 用于准备 POST 数据的 $.param 方法更直接地看到。
$.param(
[
{ "id":"1", "name":"bob"}
, { "id":"2", "name":"jonas"}
]
)
// Output: "bob=undefined&jonas=undefined"
因此,这些库为复杂的帖子数据所做的准备似乎与我预期的不同。
我看到了这个答案,但我不想将数据作为查询参数发送,因为我要发布大量内容。 如何使用 jQuery 在 .ajax 帖子中发送数组?
使用 jQuery/Zepto 通过 POST 发送多个对象的正确方法是什么?
使用 $.ajax({... data: JSON.stringify(postData) ...}) 发送未损坏的内容,但服务器不喜欢这种格式。
更新: 似乎 JSON.stringify 发送格式正确的内容。问题是服务器端对它想要的对象的结构非常非常具体。如果我从对象中添加或删除任何属性,它将使整个过程失败,而不是使用匹配的属性。这很不方便,因为使用服务器发送的内容作为视图模型很好,但是视图模型会改变。...仍在研究最佳解决方案。