Dav*_*Dev 6 javascript ajax jquery header
我有一个JS客户端(app.domain.com)连接到用rails和grape编写的API(api.domain.com).设置了CORS,我在两个域之间有一个共享cookie,因为登录是在api.domain.com服务器上执行的.
这个JS应用程序正在使用Spine.js所以一切都是用CoffeeScript编写的.所以要发送一个删除请求我只是使用:
@item.destroy
Run Code Online (Sandbox Code Playgroud)
这将向API发送DELETE请求.但是,cookie不会与请求标头一起发送,因此我必须将上面的代码行更改为以下代码:
$.ajax({
url: "http://api.domain.com/tasks/" + @item.id,
type: "DELETE",
crossDomain: true,
xhrFields: {
withCredentials: true
}
})
Run Code Online (Sandbox Code Playgroud)
这完美无缺.它将在请求中发送响应头"Access-Control-Allow-Credentials:true",以便提交cookie并对操作进行身份验证.
但是,这样我就必须为每个请求编写代码行,这非常耗时,并且还会使Spine框架的好处失效.
我知道可以在jQuery中设置默认的ajax设置,以便每个后续的ajax调用都将使用这些设置.所以我试过了:
jQuery.ajaxSetup({
headers: {
"X-Requested-With": "XMLHttpRequest",
"Access-Control-Allow-Credentials": "true"
}, crossDomain: true
});
Run Code Online (Sandbox Code Playgroud)
这与我手动为每个ajax调用设置的设置基本相同.但是,虽然我在发送给API的请求中看到了这些标头(通过firebug),但这种方法不起作用.
我错过了什么吗?
提前致谢!
DAV
小智 1
我最近遇到了一个非常类似的问题,并找到了两种简单的方法来做到这一点。首先创建 java 脚本函数来为您进行调用,即:
function delete (url){
$.ajax({
url: url,
type: "DELETE",
crossDomain: true,
xhrFields: {
withCredentials: true
}
})
}
Run Code Online (Sandbox Code Playgroud)
或者,如果在多个页面上重用,我建议创建一个可以轻松包含和重用的小类。这还使得不仅可以设置默认设置,还可以为常用的 api 调用创建函数。
| 归档时间: |
|
| 查看次数: |
4270 次 |
| 最近记录: |