只能通过服务器端告诉 ajax, 请求失效了, 让它
location.href = “”
, 跳转到登录页面.
1.过滤器里再加个ajax请求判断,
* ajax请求重定向问题的处理方法
public
void
ajaxRedirect
(
HttpServletRequest request
,
HttpServletResponse response
)
throws
IOException
{
if
(
"XMLHttpRequest"
.
equals
(
request
.
getHeader
(
"X-Requested-With"
)
)
)
{
response
.
setHeader
(
"REDIRECT"
,
"REDIRECT"
)
;
response
.
setHeader
(
"CONTENTPATH"
,
request
.
getContextPath
(
)
+
"/index"
)
;
response
.
setStatus
(
HttpServletResponse
.
SC_FORBIDDEN
)
;
}
else
{
response
.
sendRedirect
(
request
.
getContextPath
(
)
+
"/index"
)
;
2."XMLHttpRequest"表明就是ajax请求
3.前端js加一个方法, 进行跳转.
var jqxhr;
$.ajaxSetup({
complete:function(){
if("REDIRECT" == jqxhr.getResponseHeader("REDIRECT")){
var win = window;
while(win != win.top){
win = win.top;
win.location.href = jqxhr.getResponseHeader("CONTENTPATH");
});
1.问题如下:前端发起ajax请求 -> 后端拦截器进行校验(preHandle) -> 发现用户失效 -> 重定向到登录页( response.sendRedirect() )通过F12, 我们可以看到方法已经执行, 但是页面没有跳转过去? ? ?2.问题分析:ajax的机制, 就是通过XMLHttpRequest对象向服务器发送请求,从服务器获取数据! 除此之外...
301 Moved Permanently
被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个URI之一。如果可能,拥有链接编辑功能的客户端应当自动把请求的地址修改为从服务器反馈回来的地址。除非额外指定,否则这个响应也是可缓存的。
新的永久性的URI应当在响应的Location域中返回。除非这是一个HEAD请求,否则响应的实体中应当包含指向新
遇到的一个问题
ajax请求接口,接口返回status code 302 重定向,但是浏览器并未重定向成功,发生页面跳转 URL改变之类的。。。
于是,网上查找了一番,,,,,ajax 请求的status code是302后的过程是这样的:
发起ajax请求
请求响应 status code是302
未进入ajax的回调函数中,而是先重定向。
浏览器直接读取该请求的响应的response header中的location的值,发起请求。
若该请求成功,则进入第一步中的ajax请求的success回调
ajax 是默认就是不支持重定向的,它是局部刷新,不重新加载页面。
二.解决方法
后台:项目中有过滤器或拦截器,过滤器先对请求做判断,判断当前用户有无登录,若没有登录就重定向到登录页面。
前后端:后端传来特定字段,由前端判断要不要跳转,在前端做跳转,
httpResponse.addHeader(“REDIRECT”, “REDIRECT”);//告诉ajax这是重定向
ht...
需求:有一个登录的html页面,输入用户名和密码,判断用户名和密码是否都是demo,如果是则跳转到我的博客页面,如果不是则重新定向到登录页面。(由于还未学习数据库的交互,所以在此仅用一个简单的判断语句进行解释)
在这里我用的是tomcat服务器,当然运行前你需要把环境配置好
这个过程分为几个步骤:
html页面:在这里面需要注意form表单的提交位置action,并且input...
在springMVC开发时用ajax请求服务器,后台进行重定向处理时,页面ajax返回302(重定向状态码,但没有重定向到自己想要的页面);
解决办法:
后台:设置相应头表明是重定向,并且同时设置重定向的路径
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.g...