jQuery ajax 方法不接受 PlainObject 作为数据
jQuery ajax method not accepting PlainObject as data
我有以下代码:
$.ajax({
method: "POST",
url: "/handler",
contentType: "application/json",
data: data_all,
})
.done(function(r) { ...stuff... })
.fail(function(r) { ...stuff... });
data_all
是一个字典(例如,{"a":1, "b":2}
)。 运行 此代码目前 returns 一个 400 错误(使用 django,以防万一)。如果我进行一项更改:
...
data: JSON.stringify(data_all),
...
一切正常。
事实是,情况不应该如此。 jQuery AJAX 文档明确指出 data
参数接受字符串、数组和 PlainObjects。在调试器模式下(使用 Chrome 开发工具),我已验证 data_all
是一个 PlainObject:
jQuery.isPlainObject(data_all) # returns "true"
我正在使用 jQuery 2.1.4,所以应该有。知道为什么这需要 stringify
函数吗?
要用jquery发送json数据,必须先把对象字符串化再传给jQuery; jQuery不会为你做。
在幕后,如果 processData 参数为 true(默认情况下)并且数据参数不包含字符串,则数据参数的值将传递给 $.param()
,它会创建一个参数细绳。因此,如果您将对象传递给数据参数,您的请求正文将包含 a=1&b=2
。如果你简单的把processData设置为false,jquery会跳过$.param
这个过程,直接把你对象的.toString值发送给request body,也就是[object Object]
,这样不行要么工作。如果将对象字符串化为 JSON,它将是一个字符串,并且 jQuery 会将它原封不动地传递给请求正文。
我有以下代码:
$.ajax({
method: "POST",
url: "/handler",
contentType: "application/json",
data: data_all,
})
.done(function(r) { ...stuff... })
.fail(function(r) { ...stuff... });
data_all
是一个字典(例如,{"a":1, "b":2}
)。 运行 此代码目前 returns 一个 400 错误(使用 django,以防万一)。如果我进行一项更改:
...
data: JSON.stringify(data_all),
...
一切正常。
事实是,情况不应该如此。 jQuery AJAX 文档明确指出 data
参数接受字符串、数组和 PlainObjects。在调试器模式下(使用 Chrome 开发工具),我已验证 data_all
是一个 PlainObject:
jQuery.isPlainObject(data_all) # returns "true"
我正在使用 jQuery 2.1.4,所以应该有。知道为什么这需要 stringify
函数吗?
要用jquery发送json数据,必须先把对象字符串化再传给jQuery; jQuery不会为你做。
在幕后,如果 processData 参数为 true(默认情况下)并且数据参数不包含字符串,则数据参数的值将传递给 $.param()
,它会创建一个参数细绳。因此,如果您将对象传递给数据参数,您的请求正文将包含 a=1&b=2
。如果你简单的把processData设置为false,jquery会跳过$.param
这个过程,直接把你对象的.toString值发送给request body,也就是[object Object]
,这样不行要么工作。如果将对象字符串化为 JSON,它将是一个字符串,并且 jQuery 会将它原封不动地传递给请求正文。