0

我正在使用$.ajaxSetup()函数将一些额外的参数附加到我在 Spine 中的每个 AJAX 调用中。但是它没有像我期望的那样工作。

如果我按如下方式调用 $ajaxSetup(),我的 GET 请求工作正常,但我的参数被任何 POST 请求覆盖,并且不包含在表单数据中,如 id 期望的那样:

$.ajaxSetup
      data: "user_email=foo@bar.com&user_token=foobar"

结果,我尝试将我的数据字符串更改为一个对象,看看是否有任何不同:

settings =
        data:
          user_email:'foo@bar.com'
          user_token:'foobar'

$.ajaxSetup settings

但是,这会导致我的请求中的 URL 出现格式错误,如下所示: http://dev.myapp.com:5000/api/v1/posts?[object%20Object]

我尝试在 JSFiddle (我的小提琴)中重新创建它以测试我没有发疯,而且我的方法似乎像我期望的那样有效。对于 GET 请求,我的数据对象的字符串被附加到我的 URL 的末尾,而对于 POST 请求,数据对象被附加到随请求发送的表单数据中。

那我做错了什么?这是 Spine 中的错误还是其他问题?

jQuery 版本:2.0.3

4

1 回答 1

0

看起来问题在于spine将数据设置为字符串:

  type: 'POST'
  contentType: 'application/json'
  data: @record.toJSON()

(来自脊椎源

您可以使用ajaxPrefilter在发送请求之前对其进行修复。由于数据是 JSON 字符串,因此您有几个选项:

  • 将您的参数添加到 JSON(通过对其进行解码、使用$.extend,然后再次对其进行编码)

  • 将您的参数添加为自定义 HTTP 标头而不是 POST 参数

  • 将参数添加到 URL,即使是 POST 请求

于 2013-09-28T04:55:02.353 回答