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 会将它原封不动地传递给请求正文。