gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 04:32:49 24 4
gpt4 key购买 nike

我在正确形成 Backbone.Model.save 调用时遇到了一些问题。我正在调用的 Web 服务使用 URL 参数,但我在 Javascript 中拥有的是更改字段的对象。例如,我有对象 {foo: 'bar', yar: 'har'},我希望 Backbone.Model.save 将补丁请求发送到像 http 这样的 URL://服务器/路径/到/服务?foo=bar&yar=har

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

object = 
foo: 'bar',
yar: 'har'

model.save object,
patch: true

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

model.save object,
patch: true
emulateJSON: true

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

model.save object,
patch: true
contentType: "application/x-www-form-urlencoded"

这只是将 object 编码为字符串并将其填充到 options.data 中。同样,该服务不知道如何处理它。

关于如何使它符合我的服务规范的任何其他想法?我可以自己调用 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

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

最佳答案

看起来我正在寻找的是 jQuery.ajaxprocessData 选项。 Backbone.sync 默认执行以下操作:

// Don't process data on a non-GET request.
if (params.type !== 'GET' && !options.emulateJSON) {
params.processData = false;
}

因此,它没有为我将对象处理成 URL 参数。 (jQuery API)

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

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

事实上,我可能总体上没有正确使用 Backbone.Model……但是,至少它在工作。 :P

关于javascript - 将 JSON 编码为 Backbone.Model.save 的 URL 参数(patch = true),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14405332/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com