大家好,我是你的好朋友思创斯。今天说一说response received too late_sendredirect,希望您对编程的造诣更进一步.
这两天整理项目,记录一下遇到的问题。
代码:
if (request.getsession().getattribute("login") == null || !((boolean) (request.getsession().getattribute("login")))) {
response.sendredirect("http://ip:8080/html_ttms/html/login.html");//ip为服务器ip地址,在此用ip代指
return false;
}
是否还在为ide开发工具频繁失效而烦恼,来吧关注以下公众号获取最新激活方式。亲测可用!
【正版授权,激活自己账号】:
【官方授权 正版激活】:
按照平时表单提交的练习习惯,这没有什么问题,如果未登录,重定向到登录页面;拦截器的prehandle()返回false,不再继续请求的处理,直接返回,然后浏览器会重新请求重定向的url。然而浏览器那边却什么反应也没有,直到看到这篇博客,原来ajax只是利用脚本访问对应url获取数据,不能做除了获取返回数据以外的其它动作。所以浏览器端是不会发起重定向的。
解决:
在js下面新建一个judge.js文件,然后放如下代码:
! function () {
$.ajaxsetup( {
//设置ajax请求结束后的执行动作
complete : function(xmlhttprequest, textstatus) {
// 通过xmlhttprequest取响应头中信息,判断是否是重定向
var redirect = xmlhttprequest.getresponseheader("redirect");
if (redirect == "redirect") {
alert("未登录,请先登录");//提示
window.top.location.href= xmlhttprequest.getresponseheader("path");//取出路径,重定向
}
}
});
}();
window.top
功能:返回顶层窗口,即浏览器窗口。
如果窗口本身就是顶层窗口,top属性返回的是对自身的引用。
然后在每一个html中引入js,引入的时候放在其他js的下面,否则可能不起作用。
<script type="text/javascript" src="../js/judge.js">script>
后端拦截器相应代码改成:
if (request.getsession().getattribute("login") == null || !((boolean) (request.getsession().getattribute("login")))) {
response.setheader("redirect","redirect");//告诉ajax要重定向
response.setheader("path","http://ip:8080/html_ttms/html/login.html");//ip为服务器ip地址,在此用ip代指
return false;
}
这样,就可以成功跳转了。
文章由思创斯整理,转载请注明出处:https://ispacesoft.com/163807.html