jquery ajax是个很常用接口,而在请求时候,可能存在响应401的情况(身份认证过期或未登录),比较容易出现在混合应用上,如何进行身份认证,重发失败请求,还是值得注意的。

ajax请求有两种方式

1. 回调

最常写的方式,成功失败处理以回调方式传入。

$.ajax({

ajax参数...

success : xxxxxx

error: xxxxxx

});

2. Deferred方式

Deferred模式我在《js异步编程》有说明, ajax调用本身返回就是一个Deferred对象,成功失败回调不以参数传入。

$.ajax({

ajax参数...

}).then(function(res){

//成功处理片段

},function(err){

//失败处理片段

});

既然有这两种方式,那应对处理401的方式也是有两种。

401处理的两种方式

1. 回调

这种方式的处理比较简单,在失败回调里面判断401,如果是则进行身份认证,成功重发请求。

function getXXXX(type, url, data, success, error){

$.ajax({

ajax参数...

success : xxxxxx

error : function(xhr,textStatus,errorThrown){

if (xhr.status == 401) {

刷新身份认证方法(function(){

getXXXX(type, url, data, success, error);

});

} else{

// 调用外部的error

error && error(xhr,textStatus,errorThrown);

}

}

});

}

2. Deferred方式

这种方式目前我找到的处理方式需要修改jquery源码。

//全局设置一个方法

$.ajaxSetup({

authError : function(callback){

刷新身份认证方法( function(){

callback && callback();

});

}

});

//jquery2.1.4版本源码,大概是8261行

// Success/Error

if ( isSuccess ) {

deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );

} else {

if(( jqXHR.status == 401 || jqXHR .status == 403) && callbackContext.authError){

callbackContext.authError(function (){

state = 0;

jqXHR.setRequestHeader( "Authorization", XXXXXX);

jqXHR.readyState = 1;

try {

state = 1;

transport.send( requestHeaders, done );

} catch ( e ) {

// Propagate exception as error if not done

if ( state < 2 ) {

done( -1, e );

// Simply rethrow otherwise

} else {

throw e;

}

}

});

return;

} else {

deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );

}

}

这里说下为什么不能像第一种方式那样进行请求。

有两个原因:

1. then这种链式写法,导致这请求的回调不是在参数里,而是在jQuery.Callbacks一个optionsCache全局变量里,我们无法在ajax error里拿到回调函数进行重发。

2. 写在then里的回调触发一次就会被销毁,当触发了error时,回调执行后就销毁。

最后的处理方式就是在要触发error之前,拦截401的错误,重新进行身份认证,然后重置状态,重发请求。

本文为原创文章,转载请保留原出处,方便溯源,如有错误地方,谢谢指正。

jQuery&period;ajax&lpar; options &rpar; &colon; 通过 HTTP 请求加载远程数据

jQuery.ajax( options ) : 通过 HTTP 请求加载远程数据 这个是jQuery 的底层 AJAX 实现.简单易用的高层实现见 $.get, $.post 等. $.ajax() ...

用JQuery Ajax 与一般处理程序 请求数据无刷新,以及如何调试错误

通过 ajax() 与 一般处理程序,请求数据库数据,实现界面无刷新. Jquery ajax 请求参数详细说明 http://www.w3school.com.cn/jquery/ajax_ajax ...

简单的jquery ajax文件上传功能

/* * 图片上传 * 注意如果不加processData:false和contentType:false会报错 */ function uploadImage(image) { var imageF ...

兼容ie的jquery ajax文件上传

Ajax文件上传插件很多,但兼容性各不一样,许多是对ie不兼容的,另外项目中是要求将网页内容嵌入到桌面端应用的,这样就不允许带flash的上传插件了,如:jquery uploadify...悲剧 对 ...

ASP&period;NET 异步Web API &plus; jQuery Ajax 文件上传代码小析

该示例中实际上应用了 jquery ajax(web client) + async web api 双异步. jquery ajax post $.ajax({ type: "POST&q ...

struts2&plus;jquery&plus;ajax实现上传&amp&semi;&amp&semi;校验实例

一直以为ajax不能做上传,直到最近看了一些文章.需要引入AjaxFileUploaderV2.1.zip,下载链接:http://pan.baidu.com/s/1i3L7I2T 代码和相关配置如下 ...

jQuery ajax中的get请求方法汇总

$.get() Defination and Usage 从服务端以HTTP GET方式获取数据 Examples 请求test.php,但是忽略返回的数据 $.get("test.php& ...

Struts2 使用Jquery&plus;ajax 文件上传

话不多说 直接上代码 前台js: var formData = new FormData(); formData.append("file1",$("#file1&quo ...

jQuery选择器遇上一些特殊字符

学习jQuery过程中,发现一些特殊字符,如“.”,“#”,"(","]"等.它在选择器应用时,按照普通处理就会出错.解决办法,就是使用转义字符来处理,这有点象 ...

随机推荐

u-boot 流程分析

u-boot 介绍: 对于计算机来说 , 从一开始上机通电是无法直接启动操作系统的 , 这中间需要一个引导过程 , 嵌入式Linux系统同样离不开引导程序 ,  这个启动程序就叫启动加载程序(Boot ...

c&num; 获取 webbrowser 完整 cookie

下面的代码实现的功能确实如标题所言,但要求是获取的是当前进程内的webbrowser,跨进程或引用的ShellWindows对象无效, 哎我本来两种情况都要用,只把前者代码先记下: internal ...

POJ C程序设计进阶 编程题#1:寻找下标

编程题#1:寻找下标 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 已知一 ...

苹果开发——App内购以及验证store的收据(二)

原地址:http://zengwu3915.blog.163.com/blog/static/2783489720137605156966?suggestedreading 三. 客户端使用Store ...

Struts2文件下载浅析

Struts2极大的简化了文件上传和下载,本文将主要介绍一下Struts2文件下载的实现1.功能主要是,在下载页面点击下载后,则下载相应的文件 2.代码部分jsp页面downloadPage:< ...

Jar包转成Dll的方式&lpar;带嵌套的jar也能做&rpar; (转)

研究很好几天,终于成功了.因为写了一个Java的项目,现在要求要改写成C#版本的.但是其中用到了svnkit,svnkit是java平台的.改写成C#的话,要使用SharpSVN,但是SharpSVN ...

mysql 打开sql日志,记录所有sql

我使用的mysql版本为:5.7.11 win7环境 记录下下载地址,省得每次百度搜了:http://dev.mysql.com/downloads/installer/ mysql 默认没有开启sq ...

MySQL 快速复数据库的方法

为了方便快速复制一个数据库,可以用以下命令将db1数据库的数据以及表结构复制到newdb数据库 创建新的数据库 #mysql -u root -p123456 mysql>CREATE DATA ...

什么是XML RPC?

# -*- coding: cp936 -*- #python 27 #xiaodeng #什么是XML RPC? #中文叫:远程过程调用 #使用http协议做传输协议的rpc机制,使用xml文本的方 ...

ajax怎么会突然出现401,当jquery ajax遇上401请求相关推荐

  1. ajax拿table里的th值,Jquery Ajax 异步设置Table中某列的值

    可根据table中某列中的ID去改变某列的值! 只是参考,实际应用中不能这样做的,如果有很多行,频繁访问服务器,服务器是顶不住的! JS: $(document).ready(function () ...

  2. ajax传值从前台到后台乱码,jquery ajax传值,get方式后台中文乱码

    经过jquery ajax传值,后台出现中文乱码,通过一番摸索后发现原来客户端浏览器经过get方式传递到项目后台时,编码格式是ISO-8859-1,须要咱们在后台通过转码才能正常使用.方法以下:jav ...

  3. ajax 更新页面变量,[Django 1.5] jQuery/Ajax 在Django使用 ,如何更新模板里里变量

    最近希望实现一个页面局部刷新的功能,于是开始查阅ajax资料.幸好现在ajax很多功能都封装在jQuery这个库里面,我们可以很方便去调用.通过学习几个简单的小例子,可以实现简单的前端代码更新,还有重 ...

  4. mvc ajax提交多选,javascript – 如何使用Jquery AJAX调用MVC Action然后在MVC中提交表单?...

    在我的MVC视图我有按钮: 当我点击这个按钮我需要调用一个动作,做一些东西,然后提交我的表单. 我有这个jQuery: $('#btnSave').click(function () { $.ajax ...

  5. $.ajax datatype默认是什么类型,理解jquery ajax中的datatype属性选项值

    jquery中ajax的dataType属性用于指定服务器返回的数据类型,如果不指定,jQuery 将自动根据HTTP包MIME信息来智能判断,如果datatype选项不填写的话,会将返回的数据当成字 ...

  6. php ajax mysql 分页查询_PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)

    1.首先做主页面Ajax_pag.php 代码如下: Ajax做分页 .header{ margin-top: 20px; } 关键字: 地区代号地区名称父级代号 2.然后做分页查询JS页面Ajax_ ...

  7. ajax点击事件无法触发,解决jQuery Ajax动态新增节点无法触发点击事件的问题_婳祎_前端开发者...

    在写ajax加载数据的时候发现,后面添加进来的demo节点元素,失去了之前的点击事件.为什么点击事件失效,我们该怎么去解决呢? 其实最简单的方法就是直接在标签中写οnclick="" ...

  8. ajax三种错误ie,ie下jquery ajax 80020101错误的解决方法

    注意注释 删除这些注释就可以了 Windows下一个MySQL有些错误的解决方法 1.无论是什么提示.我们有一个直接看错误日志.由于它描述了最具体描述错误日志. 于MySQL安装文件夹中找到 my.i ...

  9. ajax拒绝访问,带CORS的IE9 jQuery AJAX返回“访问被拒绝”

    带CORS的IE9 jQuery AJAX返回"访问被拒绝" 以下适用于IE以外的所有浏览器(我在IE 9中测试).jQuery.support.cors = true;... $ ...

  10. ajax token验证实例,实例详解jQuery Ajax使用Token验证身份

    因为最近做了几个后台,所以经常会涉及到Token验证身份操作后台,所以这里记录一个如何向后台传请求头和Token.本文主要介绍了jQuery Ajax使用Token验证身份实例代码,需要的朋友可以参考 ...

最新文章

  1. Apache Ant安装 验证
  2. 使用 Apache OpenJPA 开发 EJB 3.0 应用,第 6 部分: 处理实体生命周期事件的回调
  3. android实现自动抢红包,Android手机辅助功能实现自动抢微信红包功能
  4. android 名片识别 简书,iOS 自己实现 名片识别 三 图片处理
  5. matlab第七章符号对象,MATLAB语言:第七章 MATLAB符号计算
  6. Linxu入门(一)
  7. linux 常用到的命令(centos 6.5)
  8. 由于域安全组嵌套导致SPS访问控制群组和用户配置文件搜索失败
  9. RSA密钥的数据类型转换:由合法的string到PublicKey或PrivateKey
  10. 测试人员必掌握的测试文档
  11. hbase数据库详解
  12. 从行业到技术,10+年资深工程师带你进行嵌入式行业职业规划!
  13. Vulkan 基本原理
  14. vivo市场API事件上报对接
  15. 一级建造师能挂靠到三级资质的企业吗?
  16. JavaScript中用数组实现键值对
  17. 游戏中的抗锯齿技术Anti-Alasing提炼总结
  18. Django-应用app名配置中文显示
  19. 【解决方案】英文论文投稿提交中显示“ unauthorized content”——投稿系统Editorial Manager
  20. android 开红包动画,Android实现红包雨动画效果

热门文章

  1. LTE无线网络优化岗位及工作任务分析
  2. 计算机网络与通信毕业论文题目,数据通信与网络系统毕业论文题目(692个).doc...
  3. 用了亿恩的空间,总有上当的感觉
  4. 一文系统搞懂协同推荐算法(二)
  5. 专题详解-5G接入控制(1)
  6. Unity-CharacterController(角色控制器)
  7. hadoop学习笔记7-Azkaban
  8. 近年来的Java面试题汇总。帮你圆大厂梦。
  9. 2014互联网十大斗殴事件,看了我也是醉了~
  10. docker-bridge如何通信