Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
全局$.ajaxSetup()的jQuery异常是否可能?_Jquery_Ajax - Fatal编程技术网

全局$.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也被捕获。那么,我该如何:

  • 重写上述代码以仅捕获来自我的域的401,或
  • 对上述代码进行$.ajax()调用,但有一个例外(使用不同的错误处理程序)
  • 多谢

    来自jQuery API

    如果请求成功,状态码函数采用与成功回调相同的参数;如果它导致错误,它们将采用与错误回调相同的参数。


    我建议您查看获得的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上运行该函数。