全局$ .ajaxSetup()的jQuery异常可能吗?

时间:2012-07-11 20:16:57

标签: jquery ajax

我使用以下内容来捕获未经授权的访问并强行登录:

$.ajaxSetup({
    statusCode: {
        401: function(){
            //do stuff
        }
    }
});

在访问我的服务器(域)上的资源时工作得很好,但现在我试图通过ajax调用使用第三方API资源,并且他们的401也被这个抓住了。那么,我怎么可能:

  1. 重写上述代码,仅从我的域中捕获401,或
  2. 使用上述代码的异常进行$ .ajax()调用(使用不同的错误处理程序)
  3. 非常感谢!

3 个答案:

答案 0 :(得分:12)

通过实验,我发现了答案。 $ .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) {
    }
});

答案 1 :(得分:1)

扩展@MrOBrian的答案,在401函数中,this被设置为包含有关AJAX请求信息的设置对象。其中一个属性是url。您可以阅读此内容,并检查它是否是您的网址。

$.ajaxSetup({
    statusCode: {
        401: function(){
            var url = this.url;
            if(url === myurl){ // check if url is yours
            }
            else{
                // not your URL, do nothing
                return;
            }
        }
    }
});

答案 2 :(得分:0)

来自jQuery API

If the request is successful, the status code functions take the same parameters as the success callback; if it results in an error, they take the same parameters as the error callback.

我建议你查看你得到的jqXHR参数,看看你是否可以将它缩小到你的域名,但是我不太了解jQuery的那个方面来为你提供准确的代码。