Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.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/2/ajax/6.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编码为Backbone.Model.save的URL参数(patch=true)_Javascript_Ajax_Backbone.js - Fatal编程技术网

Javascript 将JSON编码为Backbone.Model.save的URL参数(patch=true)

Javascript 将JSON编码为Backbone.Model.save的URL参数(patch=true),javascript,ajax,backbone.js,Javascript,Ajax,Backbone.js,我在正确建立主干网.Model.save呼叫时遇到一些问题。我调用的web服务使用URL参数,但我在Javascript中拥有的是一个更改字段的对象。例如,我有一个对象{foo:'bar',yar:'har'},我希望Backbone.Model.save向类似的URL发送补丁请求http://server/path/to/service?foo=bar&yar=har 听起来很简单,对吧?不管怎样,这给我带来了很多麻烦。以下是我到目前为止得到的结果(这不起作用;我也有成功/错误回调,但我认为这

我在正确建立主干网.Model.save呼叫时遇到一些问题。我调用的web服务使用URL参数,但我在Javascript中拥有的是一个更改字段的对象。例如,我有一个对象
{foo:'bar',yar:'har'}
,我希望Backbone.Model.save向类似
的URL发送补丁请求http://server/path/to/service?foo=bar&yar=har

听起来很简单,对吧?不管怎样,这给我带来了很多麻烦。以下是我到目前为止得到的结果(这不起作用;我也有成功/错误回调,但我认为这些对问题并不重要):

我也尝试过其他一些选择:

model.save object,
    patch: true
    emulateJSON: true
这将contentType设置为“application/x-www-form-urlencoded”,这很好,但是Backbone.sync在ajax请求中发送的数据是:{model:{foo:“bar”,“yar:“har”}。服务得到了这一点,不知道如何处理“model”属性

model.save object,
    patch: true
    contentType: "application/x-www-form-urlencoded"
这只是将
对象
编码为字符串,并将其填充到
选项中。数据
。同样,服务不知道如何处理它

关于如何使其符合我的服务规范,还有其他想法吗?我可以自己调用ajax并更新模型(以及它所属的集合),但我真的不想这样做。适合我的ajax请求是:

$.ajax
    url: "http://server/path/to/service"
    type: "PATCH"
    data: object
更新:我前面的两个选项不起作用的原因在Backbone.js中很清楚:

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

// For older servers, emulate JSON by encoding the request into an HTML-form.
if (options.emulateJSON) {
  params.contentType = 'application/x-www-form-urlencoded';
  params.data = params.data ? {model: params.data} : {};
}
看到这一点,我想,如果我将对象填充到对象的
options.data
中并发送空属性,也许它会起作用:

model.save {},
    patch: true
    data: object

显然,这试图修补一个选项“[对象对象]”。我猜它在某处对对象进行了字符串化…但这可能接近正确答案?

看起来我要找的是
jQuery.ajax
主干网的
processData
选项。默认情况下,sync执行以下操作:

// Don't process data on a non-GET request.
if (params.type !== 'GET' && !options.emulateJSON) {
  params.processData = false;
}
因此,它没有为我将对象处理为URL参数

因此,一段有效的代码是:

model.save {},
    patch: true
    data: object
    processData: true
事实上,我可能没有使用主干网。整体来说,模型是正确的……但是,至少它是有效的。:p

model.save {},
    patch: true
    data: object
    processData: true