ajax与重定向

在修改公司的老项目中,遇到了一个问题,就是session失效的时候,在页面没有刷新的情况下,点击操作无效,查了一下,原因是ajax机制无法实现重定向,查了很久的资料,现有一下解决方法(都是百度得来的,自己整理一下方便以后使用)

1.ajax 是默认就是不支持重定向的,它是局部刷新,不重新加载页面。

2.我的解决办法就是从前后端都做处理,项目中遇到重定向大多出现在拦截器或者过滤器中。在项目中我使用spring的拦截器去拦截所有的action请求,判断当前用户有无登录,若没有登录就重定向到登录页面。

3.后端在Filter中做判断,如果当前没有用户则执行一下代码

publicvoidreDirect(HttpServletRequest request, HttpServletResponse response) throws IOException{ 
//获取当前请求的路径
	String basePath = request.getScheme() +"://" + request.getServerName() + ":" + request.getServerPort()+request.getContextPath(); 
	//如果request.getHeader("X-Requested-With") 返回的是"XMLHttpRequest"说明就是ajax请求,需要特殊处理
	if("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))){
		//告诉ajax我是重定向
		response.setHeader("REDIRECT","REDIRECT");
		//告诉ajax我重定向的路径
		response.setHeader("CONTENTPATH", basePath+"/login.html");
		response.setStatus(HttpServletResponse.SC_FORBIDDEN);
	}else{
		response.sendRedirect(request.getContextPath() + "/login.html");
	}
}

4.前端在全局通用的js中写上一下代码

$.ajaxSetup({complete:function(xhr,status){
	//若HEADER中含有REDIRECT说明后端想重定向
	if("REDIRECT" == xhr.getResponseHeader("REDIRECT")){ 
        //将后端重定向的地址取出来,使用win.location.href去实现重定向的要求
        	window.location.href = xhr.getResponseHeader("CONTENTPATH");
        }
}});

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值