使用$ .ajaxSetup()将数据对象附加到Spine中的AJAX调用

时间:2013-09-27 13:01:09

标签: ajax jquery coffeescript spine.js

我正在使用$.ajaxSetup()函数为Spine中的每个AJAX调用添加一些额外的参数。然而,它并没有像我期望的那样工作。

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

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

因此,我尝试将数据字符串更改为对象,以查看是否有任何区别:

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

$.ajaxSetup settings

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

我已经尝试在JSFiddle(my fiddle)中重新创建它,以测试我不会发疯,看起来我的方法可以像我期望的那样工作。对于GET请求,我的数据对象的字符串被附加到我的URL的末尾,并且对于POST请求,数据对象被附加到随请求一起发送的表单数据。

那么我做错了什么?这是Spine或其他什么的错误吗?

jQuery版本:2.0.3

1 个答案:

答案 0 :(得分:0)

看起来问题是脊椎将数据设置为字符串:

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

(来自the spine source

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

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

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

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

  • 上也是如此