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

2023-12-19

我想在 Zepto 或 Jquery 中使用 $.ajax 发布一组对象。两者都表现出相同的奇怪错误,但我找不到我做错了什么。

当使用像“RestEasy”这样的测试客户端发送数据时,数据会保存到服务器,并且我可以看到请求在浏览器的网络面板中被破坏,所以我相信 JS 是罪魁祸首。

如果我发送一个对象数组作为 POST 的数据属性,它们将无法正确发送。

数据对象:

var postData = [
    { "id":"1", "name":"bob"}
  , { "id":"2", "name":"jonas"}
  ]

Request:

$.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 帖子中发送数组? https://stackoverflow.com/questions/2403266/how-do-i-send-an-array-in-an-ajax-post-using-jquery

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

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

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


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

Works:

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 $.ajax(jQuery 或 Zepto)发布对象数组 的相关文章

随机推荐