所有jQuery ajax调用的默认设置

时间:2013-02-19 01:58:34

标签: javascript jquery ajax header

我有一个JS客户端(app.domain.com),它连接到用rails和grape编写的API(api.domain.com)。设置了CORS,我在两个域之间有一个共享cookie,因为登录是在api.domain.com服务器上执行的。

这个JS应用程序正在使用Spine.js,所以一切都是用CoffeeScript编写的。 因此,要发送删除请求,我只需使用:

    @item.destroy

这将向API发送DELETE请求。但是,cookie不会与请求标头一起发送,因此我必须将上面的代码行更改为以下代码:

    $.ajax({
        url: "http://api.domain.com/tasks/" + @item.id,
        type: "DELETE",
        crossDomain: true,
        xhrFields: {
            withCredentials: true
        }
    })

这完美无缺。它将在请求中发送响应头“Access-Control-Allow-Credentials:true”,以便提交cookie并对操作进行身份验证。

但是,这样我就必须为每个请求编写代码行,这非常耗时并且还会使Spine框架的好处失效。

我知道可以在jQuery中设置默认的ajax设置,以便每个后续的ajax调用都将使用这些设置。所以我试过了:

jQuery.ajaxSetup({
headers: {
    "X-Requested-With": "XMLHttpRequest",
    "Access-Control-Allow-Credentials": "true"
    }, crossDomain: true
});

这与我手动为每个ajax调用设置的设置基本相同。 但是,虽然我在发送给API的请求中看到了这些标头(通过firebug),但这种方法不起作用。

我错过了什么吗?

提前致谢!

DAV

2 个答案:

答案 0 :(得分:1)

我最近遇到了一个非常类似的问题,并找到了两种简单的方法。首先创建java脚本函数来为你调用,即:

function delete (url){
   $.ajax({
        url: url,
        type: "DELETE",
        crossDomain: true,
        xhrFields: {
            withCredentials: true
        }
    })
}

或者如果在多个页面上重复使用,我建议创建一个可以轻松包含和重用的小类。这也可以设置多个默认设置,并为常用的api调用创建函数。

答案 1 :(得分:0)

在客户端应用的引导程序中执行此操作:

$.ajaxSetup({
  xhrFields: {
    withCredentials: true
  }
})

然后服务器需要用这个cors头响应:

Access-Control-Allow-Credentials: true