美文网首页
ajax重定向

ajax重定向

作者: yeathMe | 来源:发表于2018-01-23 21:49 被阅读0次

参考文章:http://blog.csdn.net/sunny__wei/article/details/78903735

1 后端处理

public class SessionInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest servletRequest, HttpServletResponse servletResponse, Object handler)
            throws Exception {

        String requestPath = WebUtils.getPathWithinApplication(WebUtils.toHttp(servletRequest));
        System.out.println(requestPath);
        if (requestPath.equals("/login")) {
            return true;
        }
        if(session中含有user 信息)return true

        reDirect(servletRequest, servletResponse);

        return false;
        // 判断用户是否是访问自己的数据,比如说查看自己的订单,但是有些url是不需要进行限制的

    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {

    }

    // 对于请求是ajax请求重定向问题的处理方法
    public void reDirect(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");
            response.setStatus(HttpServletResponse.SC_ACCEPTED);
        } else {
            response.sendRedirect(basePath + "/login");
        }
    }

}

几点注意:
(1),
String requestPath = WebUtils.getPathWithinApplication(WebUtils.toHttp(servletRequest)); 是转么用来获取请求路径的, 比如说说你的请求url为http://locahost:8081/WebName/account/address/add
那么获取到的路径就是/account/address/add 也就是除了web应用名称之后的那部分
因此我们可以使用这个来判断是否是登陆请求的路径

(2) 在做重定向的时候 判断是否是ajax请求,如果是ajax请求那么就在请求头中添加 标示信息,
这个标示信息 意思是告诉前端这个是一个ajax重定向 的操作,另外需要添加一个请求头参数 是重定向请求的路径。
特别注意 response.setStatus(HttpServletResponse.SC_ACCEPTED); 这里的是指设置ajax请求的返回状态码为200, 这个状态码不可以是302,不可以是403 404等其他状态码.

2前端设置

  //设置ajax请求完成后运行的函数,
            $.ajaxSetup({
                complete:function(){
                    if("REDIRECT" == jqxhr.getResponseHeader("REDIRECT")){ //若HEADER中含有REDIRECT说明后端想重定向,
                        var win = window;
                        while(win != win.top){
                            win = win.top;
                        }
                        win.location.href = jqxhr.getResponseHeader("CONTENTPATH");//将后端重定向的地址取出来,使用win.location.href去实现重定向的要求
                    }
                }
            });
            var jqxhr;
            jqxhr=  $.ajax({
                type: "post",
                dataType: "json",
                url: "/account/address/ajax",
                success: function (data) {
                    var data = eval("(" + data + ")");
                    if (data.status == 200) {
                        $("#" + panelId).remove();
                    }else{
                        alert(data.msg);
                    }
                    console.log(data);

                }
            });

意思是将当前ajax请求保存起来,然后根据请求返回的请求头中的数据判断是否需要进行重定向操作。

相关文章

  • SpringMVC学习day-67:SpringMVC重定向和文

    一、SpringMVC中的转发和重定向 1.SpringMVC结合Ajax: Springmvc结合Ajax的方式...

  • ajax重定向

    参考文章:http://blog.csdn.net/sunny__wei/article/details/7890...

  • web性能优化

    减少HTTP请求、合并文件、利用css sprite 减少DNS查找 避免重定向 响应时间,使用ajax进项缓存,...

  • Ajax访问的servlet路径,不能在该servlet下转发或

    原因:servlet中转发或重定向,响应给浏览器则能够得到效果。到通过Ajax请求访问的servlet,该serv...

  • ajax为何不会重定向

    前言 大致就是前端通过ajax发起一个请求,得到的是个302页面,前端没能自行跳转到重定向页面 正文 源码嗯,实践...

  • 雅虎军规:前端优化的35条建议

    内容部分1、尽量减少HTTP请求数2、减少DNS查找3、尽量避免重定向4、让Ajax可缓存5、延迟加载组件6、预加...

  • ajax请求Session失效处理

    背景 ajax请求时,如果session失效,此时不能在后台直接指定浏览器进行重定向,这时候需要在服务器端和前端同...

  • Ajax一些坑

    ajax回调函数重定向或者页面跳转,有些浏览器会被拦截。无法正常工作。特别是跨域跳转,60%的浏览器都不执行内部安...

  • 第07章重定向管道

    输出重定向案例 > < 脚本中使用重定向 2.输入重定向及结合案例 管道 | 重定向和管道的符号对比。重定向输出到...

  • shell 笔记 Day1

    重定向: (覆盖重定向), >>(追加重定向) , 2>(重定向错误信息) , &>(错误正确都重定...

网友评论

      本文标题:ajax重定向

      本文链接:https://www.haomeiwen.com/subject/gopeaxtx.html