文档章节

ajax提交redirect问题

wiitht
 wiitht
发布于 2017/06/29 19:40
字数 501
阅读 8
收藏 0

    Ajax发送请求经常遇到一些问题,其中比较有趣的一个问题是ajax发送一个请求给后端,后端无法进行重定向?

    先卖个关子了解一下ajax与form的提交的区别:

   1.ajax提交可以实现异步请求,在页面不刷新的情况下,数据就可以返回过来; 但是form提交之后页面会刷新,并获得信息。

   2.form在提交数据之后会刷新页面,并且当是post的时候再点击刷新的时候浏览器或提示是否再次提交。

Ajax提交则不会在点击提交之后自动刷新页面。

    后端关于两者的数据接收并无差别。 

    Form的enctype属性可以通过application/x-www-form-urlencoded 或 multipart/form-data来表达;

    参考:http://blog.csdn.net/soonfly/article/details/52082547

    ajax也可以通过设置header头部application/x-www-form-urlencoded来表示是一个form请求,但是其本质与纯粹的form提交还是有很大的区别的: 

   ajax是基于XMLHttpRequest对象发起请求的,XmlHTTPRequest的行为将依赖用户浏览器。一般来说XmlHTTPRequest不能得到这个消息头,也不能得到http 302的状态码,而是直接继续访问跳转页面Location: testpost.php,如果访问成功,直接返回http状态码200,并读取得到此页面的文本输出。

     当服务器发现客户session失效的时候,这个时候发生redirect,ajax是无法处理的,他只会将我们的redirect的结果当成数据获取;302状态只有浏览器才能进行处理,而且浏览器会为我们处理这个状态;这里的关键在xmlHttpRequest的核心在于他是客户端获取服务端数据的封装对象,至于服务端返回的是xml还是html或者其他数据流他不关心,所以中间的redirect的操作被当成响应结果处理了。

  https://segmentfault.com/a/1190000004322487 

 

© 著作权归作者所有

wiitht
粉丝 4
博文 158
码字总数 113941
作品 0
深圳
架构师
私信 提问
Django - 如何处理前端的ajax form submit 请求?通过json返回处理结果,不要重定向(redirect)

问题背景 在web应用开发中,经常遇到需要诸如用户注册提交个人信息,或者录入商品信息的需求。在浏览器上一般以一个Form表单来包含用户所有需要输入的控件。那么浏览器需要在用户输入完所有信...

fall4u
2018/01/09
0
0
JFinal ajax提交问题

@JFinal 你好,想跟你请教个问题:我现在做了一个登陆界面使用JQuery的AJAX提交,没有使用form方式提交,体后在Controller中逻辑处理完成之后调用redirect("/") 进行跳转到首页,为什么跳转不...

outman_722324
2014/07/30
1K
2
Spring MVC防重复提交

如何在Spring MVC里面解决此问题(其它框架也一样,逻辑一样,思想一样,和具体框架没什么关系)。要解决重复提交,有很多办法,比如说在提交完成后redirect一下,也可以用本文提到的使用tok...

zyqJustin
2016/06/16
276
0
spring mvc3.2.4 页面跳转没有显示

Spring MVC 3.2.4 action 跳转到 jsp 页面时,页面无法显示, 在 firebug 中能看到请求,但是页面就是没有跳转。而且还有一个奇怪的问题出现了。下面开始详细介绍: 先把基本代码交代一下:先...

要化茧的小虫
2013/10/09
4K
5
表单重复提交Double Submits

可能发生的场景: 多次点击提交按钮 刷新页面 点击浏览器回退按钮 直接访问收藏夹中的地址 *重复发送HTTP请求(Ajax) (1)点击按钮后disable该按钮一会儿,这样能避免急躁的用户频繁点击按...

程序猿之小菜鸟
2015/09/23
115
0

没有更多内容

加载失败,请刷新页面

加载更多

将key=value转成对象形式

var params = {};testParan.split(',').forEach(item =>{ var tmpArr = item.split('='); Vue.set(params, tmpArr[0].trim(), tmpArr[1].trim());});Vue.set(params, 'sql', sql);......

沉迷代码我爱学习
22分钟前
4
0
什么是分立器件

  分立器件被广泛应用到消费电子、计算机及外设、网络通信,汽车电子、led显示屏等领域。   半导体产业中有两大分支:集成电路和分立器件。   集成电路   集成电路(integrated circ...

仙溪
32分钟前
5
0
kibana rpm安装

https://www.elastic.co/guide/en/kibana/6.2/rpm.html 下载对应的版本wget https://artifacts.elastic.co/downloads/kibana/kibana-6.2.4-x86_64.rpm 安装 rpm -ivh kibana-6.2.4-x86_64......

看的最远的地方
35分钟前
3
0
高防CDN相比较于高防服务器,为何更加稳定?

对于DDoS攻击,那些已经做过网站、平台的人应该知道,DDoS攻击是非常可怕的,因为这种攻击本质上不能防御,或者DDoS攻击只能被减轻,不能完全消除。DDoS,意思是“分布式拒绝服务”。它是一种...

云漫网络Ruan
36分钟前
4
0
线程SuspendThread() ResumeThread()的使用

SuspendThread():挂起线程 If the function succeeds, the return value is the thread's previous suspend count; otherwise, it is (DWORD) -1. ResumeThread():启动线程 If the functio......

rainbowcode
36分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部