gpt4 book ai didi

jquery - 如何使用 $.ajax(jQuery 或 Zepto)发布对象数组

转载 作者:行者123 更新时间:2023-12-03 21:27:43 24 4
gpt4 key购买 nike

我想在 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"

所以看来这些库为复杂的发布数据所做的准备与我预期的不同。

我看到这个答案,但我不想将数据作为查询参数发送,因为我发布了大量内容。 How do I send an array in an .ajax post using jQuery?

使用 jQuery/Zepto 通过 POST 发送多个对象的正确方法是什么?

使用 $.ajax({... data: JSON.stringify(postData) ...}) 发送未损坏的内容,但服务器不喜欢该格式。

更新:似乎 JSON.stringify 发送格式正确的内容。问题是服务器端对于它想要的对象的结构非常非常具体。如果我从对象中添加或删除任何属性,整个过程都会失败,而不是使用匹配的属性。这很不方便,因为使用服务器发送的内容作为 View 模型很好,但 View 模型会发生变化。...仍在研究最佳解决方案。

最佳答案

发送前请务必字符串化。我过于依赖这些库,并认为它们会根据我发布的 contentType 进行正确编码,但它们似乎不会。

作品:

$.ajax({
url: _saveAllDevicesUrl
, type: 'POST'
, contentType: 'application/json'
, data: JSON.stringify(postData) //stringify is important
, success: _madeSave.bind(this)
});

与使用像 $.toJSON 这样的插件相比,我更喜欢这种方法,尽管这确实可以完成同样的事情。

关于jquery - 如何使用 $.ajax(jQuery 或 Zepto)发布对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11109795/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com