【问题标题】:Using $.ajaxSetup() to append a data object to AJAX calls in Spine使用 $.ajaxSetup() 将数据对象附加到 Spine 中的 AJAX 调用
【发布时间】:2013-10-03 18:58:41
【问题描述】:

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

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

$.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 (my fiddle) 中重新创建它以测试我没有发疯,而且我的方法似乎可以正常工作。对于 GET 请求,我的数据对象的字符串被附加到我的 URL 的末尾,而对于 POST 请求,数据对象被附加到与请求一起发送的表单数据中。

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

jQuery 版本:2.0.3

【问题讨论】:

    标签: ajax jquery coffeescript spine.js


    【解决方案1】:

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

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

    (来自the spine source

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-04
      • 2021-08-20
      • 2019-11-29
      • 2017-06-06
      • 2016-06-28
      • 1970-01-01
      • 1970-01-01
      • 2020-07-31
      相关资源
      最近更新 更多