Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么在使用额外数据保存主干模型时需要使用JSON.stringify for:{}参数?_Javascript_Json_Backbone.js - Fatal编程技术网

Javascript 为什么在使用额外数据保存主干模型时需要使用JSON.stringify for:{}参数?

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({

我正在保存一个主干模型,我正在使用的API也需要传递“full=true”才能正常工作。例如,要保存它,需要执行以下操作:

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));
}