全局$.ajaxSetup()的jQuery异常是否可能?
我使用以下方法捕获未经授权的访问并强制登录:全局$.ajaxSetup()的jQuery异常是否可能?,jquery,ajax,Jquery,Ajax,我使用以下方法捕获未经授权的访问并强制登录: $.ajaxSetup({ statusCode: { 401: function(){ //do stuff } } }); 工作很好。。。当访问我的服务器(域)上的资源时,但现在我试图通过ajax调用使用第三方API资源,它们的401也被捕获。那么,我该如何: 重写上述代码以仅捕获来自我的域的401,或 对上述代码进行$.ajax()调用,但有一个例外(使用不同的错误处理程
$.ajaxSetup({
statusCode: {
401: function(){
//do stuff
}
}
});
工作很好。。。当访问我的服务器(域)上的资源时,但现在我试图通过ajax调用使用第三方API资源,它们的401也被捕获。那么,我该如何:
如果请求成功,状态码函数采用与成功回调相同的参数;如果它导致错误,它们将采用与错误回调相同的参数。
我建议您查看获得的jqXHR参数,看看是否可以将其缩小到您的域,但我对jQuery的这方面了解不够,无法为您提供准确的代码。通过实验,我发现了答案。$。ajaxSetup()基本上为任何$.ajax()请求设置默认值。但是,可以针对特定请求覆盖全局设置,如下所示:
$.ajaxSetup({
statusCode: {
401: function(){
//this will catch any and all access denied errors
}
}
});
$.ajax({
type: 'GET',
dataType: 'json',
url: someresouceurl,
statusCode: {
401: function(){
//except this one!
}
},
success: function(data) {
}
});
扩展@MrOBrian的答案,在您的401函数中,
这个
被设置为一个包含AJAX请求信息的设置对象。其中一个属性是url
。你可以阅读这个,然后检查它是否是你的URL
$.ajaxSetup({
statusCode: {
401: function(){
var url = this.url;
if(url === myurl){ // check if url is yours
}
else{
// not your URL, do nothing
return;
}
}
}
});
在函数中,尝试
console.log(参数,this)
。其中一个对象可能包含URL,因此您只能在URL上运行该函数。