标签:type 跨域 小问题 网站 解决方案 com $.ajax onload xhr
cors下的cookie问题可以参考阮一峰的博客链接:http://www.ruanyifeng.com/blog/2016/04/cors.html
但是在实际开发当中还是会遇到点小问题,这里记录一下:
在火狐浏览器当中,如果xhr.async: false,那么在火狐浏览器下会报错。
默认的情况下,cors做到跨域之后是没有供应凭证(cookie、HTTP认证及客户端SSL证实等)(童鞋们都有牵扯到cookie吧,如果大神的网站一丁点都不占cookie的,此文略过)。重点来了,我们可以使用ajax配置项 withCredentials来解决这个问题,下来分别看看原生xhr和jquery的ajax是怎么做配置的:
//原生的配置 var xhr = new XMLHttpRequest(); xhr.open(‘GET‘, ‘http://www.xxx.com/api‘); xhr.withCredentials = true;
xhr.async=false; xhr.onload = onLoadHandler; xhr.send();
//jquery ajax配置
$.ajax({
type: "GET",
url: ‘data/tree.json‘,
async:false,
xhrFields: {
withCredentials: true
}
}).done(function(data) {
console.log(data);
});
但是!!!!在火狐浏览器中你会发现报错了

也就是说在启用同步模式的ajax后,在火狐浏览器中withCredentials配置是并不起作用的,并且不能正常返回数据,导致我们的请求“失败!”
解决方案:
jquery配置模式需要修改:
$.ajax({
type: "GET",
dataType: "json",
url: ‘data/tree.json‘,
beforeSend: function(xhr) {
xhr.withCredentials = true;
}
}).done(function(data){
console.log(data);
});
将withCredentials配置写进beforeSend函数,就可以解决了
标签:type 跨域 小问题 网站 解决方案 com $.ajax onload xhr
原文地址:https://www.cnblogs.com/xuzishuai/p/9149766.html