1.服务端先根据request头部信息里是否有"x-requested-with"来判断是否是异步请求,然后利用response对象,向客户端返回status状态,注意在异步情况下,设置status等信息后不能再调用sendRedirect方法,否则之前设置的信息会被要跳转的页面信息覆盖,导致客户端里取不到status和其他设置信息。
String isAjaxRequest = request.getHeader("x-requested-with");
if(isAjaxRequest!=null){
response.setStatus(900);
}else {
request.setAttribute("type", "noAuthority");
response.sendRedirect(request.getContextPath()+"/show_msg.jsp?type=noAuthority");
}
2.重写jquery ajax请求方法
//重写jquery ajax请求方法,添加对异步请求重定向处理
(function($){
//备份jquery的ajax方法
var _ajax=$.ajax;
//重写jquery的ajax方法
$.ajax=function(opt){
//备份opt中error和success方法
var fn = {
error:function(XMLHttpRequest, textStatus, errorThrown){},
success:function(data, textStatus){}
}
if(opt.error){
fn.error=opt.error;
}
if(opt.success){
fn.success=opt.success;
}
//扩展增强处理
var _opt = $.extend(opt,{
error:function(XMLHttpRequest, textStatus, errorThrown){
//错误方法增强处理
fn.error(XMLHttpRequest, textStatus, errorThrown);
},
success:function(data, textStatus,xhr){
//成功回调方法增强处理
fn.success(data, textStatus);
},
statusCode: {//传入statusCode对象,定义对状态码操作的方法
900 : function() {//900为服务器返回的自定义状态码,说明当前操作没有权限
alert("您没有权限进行此项操作,请联系管理员!");
return;
}
}
});
_ajax(_opt);
};
})(jQuery);