服务器端的响应是302 Found,在ajax的回调函数中能够获取这个状态码吗?能够从Response Headers中得到Location的值进行重定向吗?让我们来一起动手写写代码看看实际情况吧。

在ajax请求中,如果服务器端的响应是302 Found,在ajax的回调函数中能够获取这个状态码吗?能够从Response Headers中得到Location的值进行重定向吗?让我们来一起看看实际情况。

使用jquery的$.ajax()发起ajax请求的javascript代码如下:

复制代码 代码如下:

$.ajax({

url: '/oauth/respond',

type: 'post',

data: data,

complete: function(jqXHR){

console.log(jqXHR.status);

},

error: function (xhr) {

console.log(xhr.status);

}

});

当服务器端返回302 Found的响应时,浏览器中的运行结果如下:

在ajax的complete()与error()回调函数中得到的状态码都是404,而不是302。

这是为什么呢?

在stackoverflow上找到了

复制代码 代码如下:

You can't handle redirects with XHR callbacks because the browser takes care of them automatically. You will only get back what at the redirected location.

原来,当服务器将302响应发给浏览器时,浏览器并不是直接进行ajax回调处理,而是先执行302重定向——从Response Headers中读取Location信息,然后向Location中的Url发出请求,在收到这个请求的响应后才会进行ajax回调处理。大致流程如下:

jax -> browser -> server -> 302 -> browser(redirect) -> server -> browser -> ajax callback

而在我们的测试程序中,由于302返回的重定向URL在服务器上没有相应的处理程序,所以在ajax回调函数中得到的是404状态码;如果存在对应的URL,得到的状态码就是200。

所以,如果你想在ajax请求中根据302响应通过location.href进行重定向是不可行的。

如何解决?

方法一

继续用ajax,修改服务器端代码,将原来的302响应改为json响应,比如下面的ASP.NET MVC示例代码:

复制代码 代码如下:

return Json(new { status = 302, location = "/oauth/respond" });

ajax代码稍作修改即可:

复制代码 代码如下:

$.ajax({

url: '/oauth/respond',

type: 'post',

data: data,

dataType: 'json',

success: function (data) {

if (data.status == 302) {

location.href = data.location;

}

}

});

方法二

不用ajax,改用form。

复制代码 代码如下:

详细出处参考:

阅读(1053) | 评论(0) | 转发(0) |

服务器响应码302,ajax与302响应代码测试 详细出处参考:http://www.jb51.net/article/42327.htm...相关推荐

  1. 服务器响应码302,ajax与302响应代码测试

    在ajax请求中,如果服务器端的响应是302 Found,在ajax的回调函数中能够获取这个状态码吗?能够从Response Headers中得到Location的值进行重定向吗?让我们来一起看看实际 ...

  2. 巨人通力电梯服务器显示,巨人通力电梯的所有故障代码大全[详细版]

    通力电梯故障代码详解.通力电梯的控制系统可监测到电梯电气系统的常见基本故障,对于监测到的故障,可通过LCECPU板上的显示窗口以故障代码的数字形式显示出来.电梯的控制系统的NVRAM可同时存储99个常 ...

  3. HTTP 响应行 错误类型响应码

    新增网关响应(知识补充,和文章内容无关) 网关响应 网关响应指未能成功处理API请求,从而产生的错误响应. API网关提供默认的网关响应(default).如果您需要自定义响应状态码或网关响应内容,可 ...

  4. HTTP常用的响应码说明(网页/服务器显示200、302、404、500是什么意思,表示什么)

    常用的响应码说明 200 表示请求成功 302 表示请求重定向 404 表示请求服务器已经收到,但是想要的数据不存在(一般是请求地址错误) 500 表示请求服务器已经收到,但是服务器内部发生错误(代码 ...

  5. http 响应码 301 和 302 代表的是什么?有什么区别?

    http 响应码 301 和 302 代表的是什么?有什么区别? 从官方文档的译文中 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status ...

  6. java 302 301,http响应码301和302代表的是什么?有什么区别?

    301 Moved Permanently 被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个 URI 之一.如果可能,拥有链接编辑功能的客户端应当自动把请求的地址 ...

  7. Java面试题之:http 响应码 301 和 302 代表的是什么?有什么区别?

    http 响应码 301 和 302 代表的是什么?有什么区别? 一.http 响应码 301 和 302 代表的是什么?有什么区别? 一.http 响应码 301 和 302 代表的是什么?有什么区 ...

  8. hppt服务器状态响应码

    HTTP响应状态码 1xx:临时响应 表示临时响应并需要请求者继续执行操作的状态代码. 100 继续请求者应当继续提出请求.服务器返回此代码表示已收到请求的第一部分,正在等待其余部分. 101 切换协 ...

  9. 服务器不响应Ajax,web前端:解决在IE11浏览器下,JQuery的AJAX方法不响应问题

    jQuery的核心特性可以总结为:具有独特的链式语法和短小清晰的多功能接口;具有高效灵活的css选择器,并且可对CSS选择器进行扩展;拥有便捷的插件扩展机制和丰富的插件.jQuery兼容各种主流浏览器 ...

最新文章

  1. 05-RARP: 逆地址解析协议
  2. 寻址(实模式和保护模式)
  3. 开源项目使用经验原则
  4. SAP WebClient UI和business switch相关的逻辑介绍
  5. 收集程序员语录70则
  6. 大专学的pHp找什么工作,大专毕业能做什么工作 毕业都去干嘛了
  7. 甲骨文因超过90亿美元的NetSuite交易起诉Larry Ellison和CEO Safra Catz
  8. 信号与系统Matlab实验1
  9. 2019年十大物联网安全事件
  10. 深度解析PHP数组函数array_merge
  11. 微信企业号上传图片 php,C#开发微信门户及应用微信企业号的消息发送(文本、图片、文件、语音、视频、图文消息等)...
  12. 乐理入门: 二、时值、节奏、节拍
  13. Ubuntu 设置屏幕字体大小
  14. Google手机操作系统Android将100%开源
  15. lumerical安装教程
  16. c语言全部题目及答案,C语言全部题目及答案
  17. windows 下 nginx 双向认证自签名证书配置
  18. iphone测试oled的软件,干货 |西努妙解 iPhoneX OLED全面屏的检测方法
  19. win10计算机日历不能用,win10系统自带日历应用不显示节日的解决方法
  20. rejected from java.util.concurrent.ThreadPoolExe错误

热门文章

  1. 读书笔记:《HTML5开发手册》--figure、time、details、mark
  2. Spring入门简介
  3. 烂泥:nginx、php-fpm、mysql用户权限解析
  4. 批量修改table和index 的表空间
  5. 超级节点根据自身的能力参与维基链生态建设
  6. 比特币现金是否失去了去中心化
  7. 关于使用sudo命令后找不到JAVA_HOME的问题
  8. GitHub遭攻击滥用以代管网钓套件
  9. 不用任何软件消除mp3的乱码
  10. 阿里云linux下修改mysql默认密码(xampp环境)- 原创