默认情况下,ASP.Net Web-API 2返回" 304找到"请求未通过授权时重定向。这对ajax请求没有用,所以我使用" X-Responded-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处理程序,我可以在其中放置我的登录重定向代码,并确保在调用done方法之前执行它个人的ajax请求。所以我可以正常地写我的ajax请求......
.done(function (data) {
alert('all done');
//do other stuff
}
全局处理程序将确保正确处理401。
问题是.ajaxComplete()在.done之后执行,因此我的ajax代码会错误地通知用户该请求已成功处理,而实际上它还没有。
有没有人知道是否有办法设置一个将在.done之前执行的全局ajax处理程序?