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

标签 jquery ajax rest zepto

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

上一篇:jquery改变div文本

下一篇:jQuery 克隆表行

相关文章:

php - 由于 CORS,Azure 网站上的 HTTP OPTIONS 请求失败

javascript - 将 $_POST 变量传递到新 URL,然后返回到之前的 URL - 最佳实践?

java - Spring MVC Rest 服务使用 JSON

Jquery slideToggle 和悬停问题

php - 使用相同的 SQL 表根据下拉列表自动填充文本字段

java - Spring Security 和 Multi-Tenancy /REST -> 如何?最佳实践?引用应用程序?

amazon-web-services - 在 AWS 中,如何将 API key 添加到我的 API?

带有过滤和授权的 RESTFul API 端点设计

javascript - $(document).scrollTop() 总是返回 0

javascript - Ajax 函数在重定向后不保存滚动位置