Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.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
Jquery 全局Ajax事件处理程序到处理程序ASP.Net Web API 401_Jquery_Ajax_Asp.net Mvc_Asp.net Web Api2 - Fatal编程技术网

Jquery 全局Ajax事件处理程序到处理程序ASP.Net Web API 401

Jquery 全局Ajax事件处理程序到处理程序ASP.Net Web API 401,jquery,ajax,asp.net-mvc,asp.net-web-api2,Jquery,Ajax,Asp.net Mvc,Asp.net Web Api2,默认情况下,ASP.NETWebAPI2在请求授权失败时返回“304找到”重定向。这对于ajax请求没有用处,因此我使用“X-responsed-JSON”响应头来检查实际的401响应,然后将用户从javascript重定向回正确的登录URL。就像这样 .done(function (data, textStatus, jqXHR) { var json_response = jqXHR.getResponseHeader("X-Responded-JSON"); if (jso

默认情况下,ASP.NETWebAPI2在请求授权失败时返回“304找到”重定向。这对于ajax请求没有用处,因此我使用“X-responsed-JSON”响应头来检查实际的401响应,然后将用户从javascript重定向回正确的登录URL。就像这样

.done(function (data, textStatus, jqXHR) {
    var json_response = jqXHR.getResponseHeader("X-Responded-JSON");
    if (json_response) {
       var json_response_obj = JSON.parse(json_response);
       if (json_response_obj.status == 401) {
          if (confirm("You are not authorised. Would you like to login again?"))
             location.href = login_url; //my MVC login URL
             return;
          }
       }
    }
    alert('all done');
    //do other stuff
这个很好用。然而,当我在一个页面上有许多ajax调用时,它似乎有点笨拙。显然,我可以把它全部放在一个函数中,但是我仍然需要记住为我可能添加的每个ajax调用调用它

我想知道的是,是否有办法添加一个全局ajax处理程序,我可以在其中放置登录重定向代码,并确保在为单个ajax请求调用done方法之前执行它。所以我可以像平常一样简单地编写ajax请求

.done(function (data) {
   alert('all done');
   //do other stuff
}
全局处理程序将确保正确处理401

问题是.ajaxComplete()在.done之后执行,因此我的ajax代码会错误地通知用户请求已成功处理,而实际上它尚未成功处理

有人知道是否有一种方法可以设置一个全局ajax处理程序,它将在之前执行。完成