Javascript 为什么在使用额外数据保存主干模型时需要使用JSON.stringify for:{}参数?
我正在保存一个主干模型,我正在使用的API也需要传递“full=true”才能正常工作。例如,要保存它,需要执行以下操作:Javascript 为什么在使用额外数据保存主干模型时需要使用JSON.stringify for:{}参数?,javascript,json,backbone.js,Javascript,Json,Backbone.js,我正在保存一个主干模型,我正在使用的API也需要传递“full=true”才能正常工作。例如,要保存它,需要执行以下操作: myModel.save(null, { data: { full: true} }); 但如果我这样做,它就不起作用,如果我查看Chrome dev tools中的网络选项卡,我会看到请求的[object]: 另一方面,如果我使用JSON.stringify,它似乎可以正常工作: myModel.save(null, { data: JSON.stringify({
myModel.save(null, { data: { full: true} });
但如果我这样做,它就不起作用,如果我查看Chrome dev tools中的网络选项卡,我会看到请求的[object]:
另一方面,如果我使用JSON.stringify,它似乎可以正常工作:
myModel.save(null, { data: JSON.stringify({ full: true}) });
当然,我每次都可以使用JSON.stringify,但我真的很想知道为什么会发生这种情况,这样我就可以创建一个自定义主干网。sync…我最终找到了答案,我会在这里回答我自己的问题,以防有人遇到同样的问题 在通过主干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));
}