资讯专栏INFORMATION COLUMN

解决ExtJs中ajax重定向的问题

clasnake / 3463人阅读

摘要:问题问题来了,都是采用向后台发送请求,这时候如果重定向到无权限的错误页面就会产生问题。最直接的解决方案就是,每一个向后台发送的请求,后台都会返回,然后判断,不符合条件就。

首先要明确的是,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("");
        out.println("");
        out.println("");
        return;
    }

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/66403.html

相关文章

  • extjs-mvc结构实践(二):基本页面

    摘要:接着来,上一篇搭建了基本的项目骨架,到最后,其实啥也没看见。。。目标全屏显示左侧导航菜单,右侧标签页切换操作内容区域。一般模型与你后台返回的数据结构一一对应。给其他组件提供一致接口使用数据。整个构成一个所谓的。 接着来,上一篇搭建了基本的项目骨架,到最后,其实啥也没看见。。。书接上回,开始写UI效果。 目标 全屏显示、左侧导航菜单,右侧标签页切换操作内容区域。包含header和foo...

    changfeng1050 评论0 收藏0
  • window.open被浏览器拦截解决方案

    摘要:原因分析深入研究当浏览器检测到非用户操作产生的新弹出窗口,则会对其进行阻止。但是,被浏览器拦截我们代码中要弹出的窗口并不是程序员所希望的。 现象 最近在做项目的时候碰到了使用window.open被浏览器拦截的情况,搞得人无比郁闷啊,虽然在自己的环境可以对页面进行放行,但是对用户来说,不能要求用户都来通过拦截。何况当出现拦截时,很多小白根本不知道发生了啥,不知道在哪里看被拦截的页面,简...

    rickchen 评论0 收藏0
  • Extjs - model总结

    摘要:数据读取器相当于原始数据格式与标准数据格式之间的桥梁,它屏蔽了原始数据格式不同对程序开发造成的影响。零是有效的,但空字符串无效。 用了Extjs快一年了,这里整理一下model。 数据模型 showImg(https://segmentfault.com/img/bVzXAR); Extjs 中数据包总共包含了40多个类,其中有三个类比其他类有更重要的地位,它们分别是:model、st...

    EastWoodYang 评论0 收藏0
  • Web项目如何防止客户端复发送请求

    摘要:在项目中,有一些请求或操作会对数据产生影响比如新增删除更新,针对这类请求一般都需要做一些保护,以防止用户有意或无意的重复发起这样的请求导致的数据错乱。本文总结了一些防止客户端重复发送请求的方法。 在Web项目中,有一些请求或操作会对数据产生影响(比如新增、删除、更新),针对这类请求一般都需要做一些保护,以防止用户有意或无意的重复发起这样的请求导致的数据错乱。 本文总结了一些防止客户端重...

    fireflow 评论0 收藏0
  • Web项目如何防止客户端复发送请求

    摘要:在项目中,有一些请求或操作会对数据产生影响比如新增删除更新,针对这类请求一般都需要做一些保护,以防止用户有意或无意的重复发起这样的请求导致的数据错乱。本文总结了一些防止客户端重复发送请求的方法。 在Web项目中,有一些请求或操作会对数据产生影响(比如新增、删除、更新),针对这类请求一般都需要做一些保护,以防止用户有意或无意的重复发起这样的请求导致的数据错乱。 本文总结了一些防止客户端重...

    sewerganger 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<