加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

解决ExtJs中ajax重定向的问题

发布时间:2020-12-16 03:33:52 所属栏目:百科 来源:网络整理
导读:首先要明确的是,ajax是局部刷新,是不支持重定向的,只能通过 window.location.href='http://xxx/error.html' 的方式实现,在后台重定向只会把html返回给前台,页面并不会跳转。 需求 首先我们项目采用的是extJs做UI框架,后台是SSM。现在项目要加入简单数

首先要明确的是,ajax是局部刷新,是不支持重定向的,只能通过window.location.href='http://xxx/error.html'的方式实现,在后台重定向只会把html返回给前台,页面并不会跳转。


需求

首先我们项目采用的是extJs做UI框架,后台是SSM。现在项目要加入简单数据权限过滤的功能,于是我使用过滤器,获取用户访问的接口地址,判断只要与session中的可以访问的数据接口权限不匹配,那么就跳转到无权限的错误页面。

问题

问题来了,ExtJs都是采用ajax向后台发送请求,这时候如果重定向到无权限的错误页面就会产生问题。最直接的解决方案就是,每一个向后台发送的ajax请求,后台都会返回message,然后判断messsage,不符合条件就window.location.href='http://xxx/error.html'。但是,如果初期有这样的设计就好了,但我这个项目是后期才加权限的功能,如果一个个改起来,肯定是不可能的。

解决方法

解决方法1

新建一个js文件,添加如下代码:

//为Ext的ajax添加监听
//requestcomplete:请求完成
Ext.Ajax.addListener("requestcomplete",function(conn,response,options,eOpts){
    //后台也可以放入请求头还获取错误信息,前台通过`response.getAllResponseHeaders()`来获取
    //var msg = response.getAllResponseHeaders();
    if(response.responseText.indexOf('error') != -1){
        window.location.href='http://xxx/error.html';
    }
},this);

一般我们的项目都是一个主的main.jsp,然后里面一个个ExtJs的iframe,所以在main.jsp中直接引入刚才新建的js,当ajax请求完成后,接收到后台返回的message,不符合条件,跳转到错误页面。

解决方法2

方法2比较通用也比较简单,直接在filter中使用out.print输出一段js进行跳转。

UserVo u = (UserVo) session.getAttribute("user");
    if (u == null) {
    PrintWriter out = res.getWriter();
    if (req.getHeader("x-requested-with") != null && req.getHeader("x-requested-with").equals("XMLHttpRequest")) {
        String message = path + "/user/loginHome";
        out.print(message);
        return;
    }else {
        out.println("<html>");
        out.println("<script>");
        out.println("alert('登录超时!请重新登录')");
        out.println("window.open ('" + path + "/user/loginHome','_top')");
        out.println("</script>");
        out.println("</html>");
        return;
    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读