javascript - 为什么在保存带有额外数据的 Backbone 模型时需要使用 JSON.stringify : {} parameters?

标签 javascript json backbone.js

我正在保存一个 Backbone 模型,我正在使用的 API 也需要传递“full=true”才能正常工作。所以例如要保存它需要做的:

myModel.save(null, { data: { full: true} });

但如果我这样做,它就不起作用,如果我查看 Chrome 开发工具中的网络选项卡,我会看到请求的 [object Object]:

enter image description here

另一方面,如果我使用 JSON.stringify,它似乎工作正常:

myModel.save(null, { data: JSON.stringify({ full: true}) });

enter image description here

当然,我每次都可以只使用 JSON.stringify,但我真的很想知道为什么会这样,这样我就可以创建一个自定义的 Backbone.sync...

最佳答案

我最终弄明白了,我会在这里回答我自己的问题,以防有人遇到同样的问题。

在通过 Backbone ajax 发送之前,数据对象最终需要是一个字符串。因为在第一种情况下我没有这样做,所以它是通过 native .toString() 方法强制转换为字符串的。例如:

var obj = {};
obj.toString(); //[object Object]

这对 API 没有意义。

在第二种情况下,因为我将数据对象字符串化,所以它工作正常。

Backbone.sync 确实使用模型属性将数据对象字符串化,但如果您传递显式数据对象,它会被覆盖:

if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {
  params.contentType = 'application/json';
  params.data = JSON.stringify(options.attrs || model.toJSON(options));
}

关于javascript - 为什么在保存带有额外数据的 Backbone 模型时需要使用 JSON.stringify : {} parameters?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19865626/

相关文章:

c++ - 如何使用 QTcpSocket 发送 JSON

java - gradle - 最小化 processResources 中的 json 资源

javascript - 如何使用 JavaScript 删除数组中的整列

php - 将自定义 HTTP header 传递给 RESTful 请求

javascript - 使用 AJAX 在 HTML 中调用 Perl 函数

javascript - 如何使用 Bookshelf.js 正确更新模型?

javascript - 使用 javascript 转到页面的某个部分

javascript - 使用主干js的动态HTML渲染在点击事件后不替换原始内容

javascript - 从嵌套 Backbone.js 模型访问属性时出现问题

javascript - 无法将所有整数日期转换为字符串