我正在使用$.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
答案 0 :(得分:0)
看起来问题是脊椎将数据设置为字符串:
type: 'POST'
contentType: 'application/json'
data: @record.toJSON()
(来自the spine source)
您可以使用ajaxPrefilter在发送请求之前修复请求。由于数据是JSON字符串,因此您有几个选项:
将您的参数添加到JSON(通过解码,使用$.extend
,然后再次编码)
将您的参数添加为自定义HTTP标头而不是POST参数
将参数添加到URL,即使是在POST请求