参考:

  Ext 提交表单用的异步提交Ajax。Ajax在发送请求时后台返回的数据(json或者html页面)在其回调函数中处理。  你这个相当于后台把Center_right.jsp页面已经返回给前台了但是前台回调函数中没有处理。 
方法: 
1.请求成功过后他返回下个页面的url,通过js直接去请求相应页面 如window.location.href="Center_right.jsp" 
2.或者拿到后台页面后通过document.getElementById('??').html=responseText;直接修改页面内容

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

用Ajax发送请求,然后后台用sendRedirec函数返回一个页面,但是实际上却什么也没有,用Fiddler4拦截http信息,发现确实返回了界面,颇为不解,搜索发现答案,转载备忘

原文地址http://www.ithao123.cn/content-2251957.html

response.sendRedirect的机制

  首先我们要明白用response.sendRedirect做转向的原理,它其实是向浏览器发送一个特殊的Header,然后由浏览器来做转向,转到指定的页面,所以用sendRedirect时,浏览器的地址栏上可以看到地址的变化。
用<jsp:forward page=""/>则不同,它是直接在server做的,浏览器并不知道,也不和浏览器打交道,这从浏览器的地址并不变化可以看出。
所以使用response.sendRedirect时就需要注意以下两点:
1,在使用response.sendRedirect时,前面不能有HTML输出。
这并不是绝对的,不能有HTML输出其实是指不能有HTML被送到了浏览器。事实上现在的server都有cache机制,一般在8K(我是说JSP SERVER),这就意味着,除非你关闭了cache,或者你使用了out.flush()强制刷新,那么在使用sendRedirect之前,有少量的HTML输出也是允许的。
如果报错说,“一些信息已经被submitted”(原文忘了),那么,你就要注意看了,前面是不是有过多的HTML输出了。
2,在response.sendRedirect之后,应该紧跟一句return;
我们已经知道response.sendRedirect是通过浏览器来做转向的,所以只有在页面处理完成后,才会有实际的动作。既然你已经要做转向了,那么后的输出还有什么意义呢?而且有可能会因为后面的输出导致转向失败。

ajax请求

Ajax的原理简单来说,实际上就是通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面。 
这其中最关键的一步就是从服务器获得请求数据。要清楚这个过程和原理,我们必须对 XMLHttpRequest有所了解。 
    我们可以看出,XMLHttpRequest对象完全用来向服务器发出一个请求的,它的作用也局限于此,但它的作用是整个ajax实现的关键,我们可以把服务器端看成一个数据接口,它返回的是一个纯文本流,当然,这个文本流可以是XML格式,可以是Html,可以是Javascript代码,也可以只是一个字符串。这时候,XMLHttpRequest向服务器端请求这个页面,服务器端将文本的结果写入页面,这和普通的web开发流程是一样的,不同的是,客户端在异步获取这个结果后,不是直接显示在页面,而是先由javascript来处理,然后再显示在页面。

解决sendRedirect失效的方法:
改变地址栏的方法,目前好像只能用location.href的方法改变。
代码如下:
var url='/aaa/abc'
$.ajax({
url:url,
type: 'post',
data: data,
dataType: 'json',
success: function (data) {
location.href =url;
}

//针对于ajax异步请求response.sendRedirect失效的处理
$(document).ready(function(){
var redirect;
redirect = "${redirect}";// 在js中使用el表达式需要使用双引号括上
if(redirect == "1"){
var win = window;
while(win != win.top){ // 顶层窗口,防止嵌入iframe窗口
win = win.top;
}
win.location.href = "${redirectUrl}";//将后端重定向的地址取出来,使用win.location.href去实现重定向的要求
}
});

重定向和请求转发的区别:

  redirect 后,确认了要跳转的页面的 url,继续执行 redirect 下面的代码;执行完后,断开当前的与

用户所发出的请求连接,即断开 request 的引用指向,因此 request 里存放的 username 信息也会丢失

;然后再与用户建立新的请求连接,即创建新的 request 对象,这样 false 页面的通过

request.getAttribute("user") 就会得到一个 null 值;最终显示的是页面是 false 页面,所以地址栏

的 url 内容会发生变化。

forward 后,确认了要跳转的页面的 url,现在停止继续执行后面的代码,而是先执行 success

(servlet) 里的代码,执行完后再回来继续执行 check 后面的代码;在这期间 check 和 success 共享

一个 request 和 response 对象,所以 success 页面通过 request.getAttribute("user") 便可以取到

值;这个过程最后执行的还是 check 页面(即使 forward 后面没有任何代码),所以地址栏的 url 内容

不会发生变化。

ajax的xmlHttpRequest异步请求和Springmvc的sendRedirect失效问题的更多相关文章

  1. 前端ajax中运用post请求和get请求之于session验证

    首先我们来看下ajax两种请求的区别: Ajax中POST和GET的区别Get和Post都是向服务器发送的一种请求,只是发送机制不同. 1. GET请求会将参数跟在URL后进行传递,而POST请求则是 ...

  2. Ajax comet XMLHttpRequest 异步

    function createXHR() { if (typeof XMLHttpRequest != “undefi ned”){      return new XMLHttpRequest(); ...

  3. perl 异步请求和JS对比

    perl 异步和js对比: /js************** $(function(){ function isPhone(str){ var regex = /[0-9]{11,11}/; ret ...

  4. js中ajax连接服务器open函数的另外两个默认参数get请求和默认异步(open的post方式send函数带参数)(post请求和get请求区别:get:快、简单 post:安全,量大,不缓存)(服务器同步和异步区别:同步:等待服务器响应当中浏览器不能做别的事情)(ajax和jquery一起用的)

    js中ajax连接服务器open函数的另外两个默认参数get请求和默认异步(open的post方式send函数带参数)(post请求和get请求区别:get:快.简单 post:安全,量大,不缓存)( ...

  5. Ajax中get请求和post请求

    我们在使用Ajax向服务器发送数据时,可以采用Get方式请求服务器,也可以使用Post方式请求服务器,那么什么时候该采用Get方式,什么时候该采用Post方式呢? Get请求和Post请求的区别: 1 ...

  6. 普通请求和ajax请求的区别

    普通请求和ajax请求的区别? 下面的action返回一个json文件,文件内容为sts.*,data1

  7. Ajax相关——get请求和post请求的区别

    一.完整的URL由以下几部分组成: scheme:通信协议,常用的有:http/ftp. host:主机,服务器(计算机)域名或IP地址 port:端口,整数,可选,省略时使用默认端口,http的默认 ...

  8. 原生ajax、XMLHttpRequest和FetchAPI简单描述

    什么是ajax ajax的出现,刚好解决了传统方法的缺陷.AJAX 是一种用于创建快速动态网页的技术.通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个 ...

  9. 原生实现ajax解析--XMLHttpRequest

    ajax基础: Asynchronous JavaScript and XML,意思就是用JavaScript执行异步网络请求. 如果仔细观察一个Form的提交,你就会发现,一旦用户点击“Submit ...

随机推荐

  1. Django Cookie,Session

    Cookie Cookie的由来 HTTP协议是无状态的,每次请求都是独立的,对服务器来说,每次的请求都是全新的,上一次的访问是数 据是无法保留到下一次的 某些场景需要状态数据或者中间数据等相关对下一 ...

  2. 【Spring】Spring bean的实例化

    Spring实现HelloWord 前提: 1.已经在工程中定义了Spring配置文件beans.xml 2.写好了一个测试类HelloWorld,里面有方法getMessage()用于输出" ...

  3. 中国剩余定理 CRT

    中国剩余定理 CRT 正常版本CRT 要解的是一个很容易的东西 \[ \begin{aligned} x\equiv a_1(mod\ m_1)\\ x\equiv a_2(mod\ m_2)\\ . ...

  4. x86汇编语言实践(1)

    0 写在前面 为了更深入的了解程序的实现原理,近期我学习了IBM-PC相关原理,并手工编写了一些x86汇编程序. 在2017年的计算机组成原理中,曾对MIPS体系结构及其汇编语言有过一定的了解,考虑到 ...

  5. tomcat logs目录下 日志文件含义及配置位置

    含义:Web服务器访问日志配置位置:server.xml 含义:tomcat的标准输出(stdout)和标准出错(stderr),应用里使用System.out打印的东西都会到这里来,日志框架,配置了 ...

  6. app升级注意事项version

    1.每次升级生成apk前,修改versionName: 位置: 2.修改数据库表中对应version字段与之对应: 3.出现waiting for debugger,要重启手机: 5.解析包错误,是a ...

  7. python的内置模块xml模块方法 xml解析 详解以及使用

    一.XML介绍 xml是实现不同语言或程序直接进行数据交换的协议,跟json差不多,单json使用起来更简单,不过现在还有很多传统公司的接口主要还是xml xml跟html都属于是标签语言 我们主要学 ...

  8. Hadoop基础-镜像文件(fsimage)和编辑日志(edits)

    Hadoop基础-镜像文件(fsimage)和编辑日志(edits) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查看日志镜像文件(如:fsimage_00000000000 ...

  9. Java使用DOM4J对XML文件进行增删改查操作

    Java进行XML文件操作,代码如下: package com.founder.mrp.util; import java.io.File; import java.util.ArrayList; i ...

  10. Shell脚本之grep

    1. 过滤空行   grep -v ^$