07. ajax请求,解决sendRedirect 无效

介绍

    1. 后台基于旧代码用的Filter验证,若 Session过期,则跳转登陆页面
    2. 前台框架:EasyUI

问题

    1. 最初后台验证不通过:


      1

      httpServletResponse.sendRedirect(httpServletRequest.getContextPath() + "/login.html");

      但是该方式对ajax请求无效,无法跳转到登陆页面

    2. 所以我把 ajax请求 和 其它静态请求等 分开处理

      1

      2

      3

      4

      5

      6

      if(servletPath.endsWith(".do")){

          java.io.PrintWriter out = httpServletResponse.getWriter();  

          out.println("/login.html");  

      }else{

          httpServletResponse.sendRedirect(httpServletRequest.getContextPath() + "/login.html");

      }

    3. 现在的问题是,我懒的为每个ajax请求再去重写onSuccess事件判断是否包含 /login.html,这样的话我还不如给Session设置过期 1个月.
      解决如下:

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      // 这是每个页面的通用引用js文件

      <script type="text/javascript" src="../scripts/common.js"></script>

      在common.js中:

      // 得益于ajax的 global(默认: true)触发全局 AJAX 事件。

      var jumpLoginPageStr = ‘<script type="text/javascript">‘

                                  ‘$(document).ajaxComplete(function(event, request, settings) {‘

                                      ‘ if(request.responseText.indexOf("/login.html") != -1){ ‘

                                              ‘window.top.location.href = "../login.html";‘

                                      ‘ }‘

                                  ‘ }) ‘

                              ‘</script>‘;

      document.write(jumpLoginPageStr);

      1. 最初使用ajaxSuccess全局事件,但是发现session过期后,即便ajax status 200 ok,也没有触发这个全局事件,就换成了 ajaxComplete
      2. request.responseText == "/login.html"    // session失效时,也判断为false,原来是:

2017年5月26日 10:24:20

时间: 2024-10-07 03:22:16

07. ajax请求,解决sendRedirect 无效的相关文章

Chrome不支持本地Ajax请求解决?

今天用JQuery操作Ajax时,使用load方法加载html块 结果提示: XMLHttpRequest cannot load file~~~~~~~Origin 'null' is therefore not allowed access 原因如下: Chrome不支持本地Ajax请求,当我在.html文件中访问使用load方法加载文件时就会出现这个问题,就是说这个时候不能加载这个.html文件. 解决方式 打开Chrome快捷方式的属性中设置: 右击Chrome浏览器快捷方式,选择“属性

ajax请求不能重定向问题探究及解决【借鉴、参考】

[声明]本文章是为了解决个人项目中遇到的ajax请求与重定向的问题,参考了多位网友的博客和意见,感谢这些网友! 1.原因探究及解决方法(参考网友,只做以后查询用) response.sendRedirect做转向的原理,它其实是向浏览器发送一个特殊的Header,然后由浏览器来做转向,转到指定的页面,所以用sendRedirect时,浏览器的地址栏上可以看到地址的变化. 而ajax请求是局部刷新,默认是不支持重定向或转发,因此需要对请求进行判断: 权限拦截器代码示例: 页面要设置全局js,重写a

ajax请求后台,response.sendRedirect失效,无法重定向

今天在写项目的时候,想加一个切换用户,需要清除session并且跳转到登录页面,发起一个ajax请求后,执行完发现无法跳转. 原因在于: (从网上摘录) Ajax只是利用脚本访问对应url获取数据而已,不能做除了获取返回数据以外的其它动作了.所以浏览器端是不会发起重定向的. 1)正常的http url请求,只有浏览器和服务器两个参与者.浏览器端发起一个http请求,服务器端处理后发起一个重定向,浏览器端从response中获取到重定向地址,发起另一个http url请求.也就是说,浏览器会按照r

springMVC 解决ajax请求的406错误

直入主题-- 页面表单异步提交:$.post('<%=request.getContextPath()%>/web/register.html', $(form).serialize(), function(data){...}); java后台springMVC的controller接受请求: @RequestMapping("register") @ResponseBody public Map<String, String> register(HttpSe

解决浏览器跨域限制发送ajax请求

一.什么是浏览器跨域限制?本质是什么? 所谓浏览器跨域限制,其实是为了数据安全的考虑由Netscape提出来限制浏览器跨域访问数据的策略,这是一中约定,正式叫法为浏览器同源策略,目前已经在大多数浏览器中支持. 本质上,所谓浏览器同源策略即:不允许浏览器访问跨域的Cookie,ajax请求跨域接口等.也就是说,凡是访问与自己不在相同域的数据或接口时,浏览器都是不允许的. 最常见的例子:对于前后端完全分离的Web项目,前端页面通过rest接口访问数据时,会出现如下问题: 不允许发送POST请求:在发

解决ajax请求cors跨域问题

”已阻止跨源请求:同源策略禁止读取位于 ***** 的远程资源.(原因:CORS 头缺少 'Access-Control-Allow-Origin').“ ”已阻止跨源请求:同源策略禁止读取位于 ******的远程资源.(原因:CORS 请求失败).“ 在项目中或者练习中经常遇到ajax请求跨域的问题,除了可以用jsonp的请求模式,并且在后台支持回调的方式以外,还可以通过简单的配置webconfig文件或者IIS,解决该问题. 一.通过修改配置文件解决CORS跨域问题 在配置文件中的webse

客户端ajax请求为实现Token验证添加headers后导致正常请求变为options跨域请求解决方法

客户端为了实现token认证,通过Jquery的ajaxSetup方法全局配置headers: 全局配置headers后会导致部分不需要token认证的请求变为options请求,导致跨域访问.报错信息如下: CORS概念 支持CORS请求的浏览器一旦发现ajax请求跨域,会对请求做一些特殊处理,对于已经实现CORS接口的服务端,接受请求,并做出回应. 有一种情况比较特殊,如果我们发送的跨域请求为"非简单请求",浏览器会在发出此请求之前首先发送一个请求类型为OPTIONS的"

js方法内Ajax请求数据判断,验证无效(OnClientClick=&quot;return Method();&quot;),还是直接执行后台代码

function CheckAdd() { var flag = true; $.ajax({ cache: false, async: false, url: "/ajaxpage/getajax.aspx?t=adjserviceclientlist&Cellphone=" + Cellphone + "&a=" + Math.random(), dataType: 'json', success: function (data) { if (d

js中ajax如何解决跨域请求

js中ajax如何解决跨域请求,在讲这个问题之前先解释几个名词 1.跨域请求 所有的浏览器都是同源策略,这个策略能保证页面脚本资源和cookie安全 ,浏览器隔离了来自不同源的请求,防上跨域不安全的操作. 跨域指的协议.域名.端口 有一个不同的情况下都是跨域 例:在本站点请求外站的数据是不允许的 //在本站点请求外站点的资源是不允许的 $(function () { $.ajax({ url: "http://127.0.0.1:14847/Web/jsonp.js", success