在 jQuery 1.4 之前(包括1.4),$.ajax() 方法返回的是浏览器原生的 XMLHttpRequest 对象。

从 jQuery 1.5 开始,$.ajax() 方法返回 jQuery 自己的 XMLHttpRequest 对象(一般简称jqXHR)。之所以这样做,是因为 jQuery 1.5 引入了延迟对象 jQuery.Deferred,以便于更好地处理和执行回调函数。

你可以简单地理解为 jqXHR 对象是 jQuery 自己伪造的一个 XMLHttpRequest 对象和 $.Deferred 对象的结合体。

jqXHR是浏览器原生 XMLHttpRequest 对象的超集。例如,它也包含 responseText 和 responseXML 属性,以及 getResponseHeader() 方法。

当传输机制与 XMLHttpRequest 对象不同时(例如,用一个 <script> 标签来完成 JSONP 请求),jqXHR对象会尽可能地模拟本地 XMLHttpRequest 对象的功能。

从jQuery 1.5.1开始,jqXHR对象也支持 overrideMimeType() 方法(它在 1.4.x 中也可用,但在 1.5 中被临时移除)。overrideMimeType() 方法可用于 beforeSend() 的回调函数中,比如用来修改 Content-Type 响应头。

从jQuery 1.5开始,$.ajax() 返回的 jqXHR 对象实现了 Promise 接口,包括其所有的属性、方法和行为。因此,我们通过 jqXHR 可以非常简单地为本次 $.ajax() 绑定 AJAX 请求对应状态执行的回调函数。

我们通过解剖一个完整的 jqXHR 对象,来了解 jqXHR 对象的属性和方法:

var jqXHR = {abort: function (statusText){// 取消请求,关闭连接
    },always: function (){// 设置请求完成(无论成功或失败)时需要执行的一个或多个回调函数
    },complete: function (){// always()函数的别名,设置请求完成(无论成功或失败)时需要执行的一个或多个回调函数
    },done: function (){// 设置请求成功时需要执行的一个或多个回调函数
    },error: function (){// fail()函数的别名,设置请求失败时需要执行的一个或多个回调函数
    },fail: function (){// 设置请求失败时需要执行的一个或多个回调函数
    },getAllResponseHeaders: function (){// 获取响应头信息的原始字符串
    },getResponseHeader: function (key){// 获取响应头中指定名称的值
    },overrideMimeType: function (type){// 重写 Content-Type 响应头
    },pipe: function (){// then() 函数的别名,分别设置请求成功、失败、正在进行时需要执行的回调函数
    },progress: function (){// 设置 Deferred 对象生成进度通知时需要执行的回调函数
    },promise: function (obj){// 为指定对象追加 Promise 对象的成员,以充当 Promise 对象
    },readyState: 4, // 请求的状态responseText: "<!DOCTYPE html><html>......</html>", // 响应的文本内容setRequestHeader: function (name, value){// 设置请求头
    },state: function (){// 确定一个 Deferred 对象的当前状态,例如:"pending"、"resolved"、"rejected"
    },status: 200,statusCode: function (map){     // 设置响应指定状态码需要执行的回调函数// map形如:{ 301:function(){}, 404:function(){} }
    },statusText: "OK", // 状态响应头中的描述文本success: function (){// done()函数的别名,设置请求成功时需要执行的一个或多个回调函数
    }
};

前面已经说了,我们通过 jqXHR 可以非常简单地为本次 $.ajax() 绑定 AJAX 请求对应状态执行的回调函数。

而 $.ajax() 方法执行完后会返回一个 jqXHR 对象。因为,我们其实大可以不在 $.ajax() 方法的参数中指定回调,转而使用链式写法,通过 jqXHR 对象的各个方法来指定回调。

像 $.get(),$.post() 这一类对 $.ajax() 进行了再封装的方法,方法本身的参数不支持设置 error 等回调,那么我们就可以用上面所说的方法来达到此目的。

//例1
$.ajax({url: '/some.js',type: 'get',  dataType: 'script'}).success(function () {//...
}).error(function () {//...
})

//例2
$.get('/some.js', function () {//...
}, 'script').error(function () {//...
})

转载于:https://www.cnblogs.com/czf-zone/p/4375323.html

Jquery jqXHR对象的属性和方法相关推荐

  1. jQuery Event对象的属性和方法

    介绍之前先介绍jQuery的一个方法 jQuery.event.fix(event || window.event); 此方法个浏览器的event对象转换为 jQuery.event; 如果您的事件是 ...

  2. ES5新增对象的属性和方法

    随笔:1.某一技术为什么而生 2.解决了什么问题 3.如何使用   4.给出代码实例 ES5新增对象的方法 一.冻结对象的freeze()方法(分为深冻结和浅冻结) var obj1 ={a:'111 ...

  3. JQuery修改对象的属性值

    JQuery修改对象的属性值 用到的便是JQuery提供的attr方法,获取属性值的基本结构为:$(obj).attr("属性名"):修改属性值的结构为:$(obj).attr(& ...

  4. ASP.NET基础教程-DataView对象的属性、方法、枚举成员

    DataView对象用于通过过滤器查看DataTable对象中的特定行.也可以排序用DataView查看的行.可以增加.修改与删除DataView中的行,这些改变也适用于DataView将从中进行读取 ...

  5. HTML中DOM对象的属性和方法的层级关系是怎样的?(目录即层次)

    HTML中DOM对象的属性和方法的层级关系是怎样的?(目录即层次) 一.总结 一句话总结:目录就是测试题 1.document取得元素(get element)的方式有哪几种? 解答:四种,分别是id ...

  6. [置顶] 深入浅出Javascript(三)创建自定义对象以及属性、方法

    怎么样创建一个对象? 利用Object创建自定义对象 JavaScript能够自定义对象来扩展程序的功能,不仅如此,它还能扩展JavaScript提供的内置对象,新增内置对象的属性或方法 例如下面代码 ...

  7. 细说JavaScript中对象的属性和方法

    最近在回家的路上读了尼古拉斯的新书<JavaScript面向对象精要>,发现自己对对象的属性和方法不是很熟悉,特别是es5新增的部分,特写此文总结一下,同时也与大家共勉. 本文分为两部分, ...

  8. python查看类的属性和方法_Python 获取对象的属性和方法—dir 函数

    工作中,我们使用一些之前没用到过的模块,使用时需要了解一下这个模块中的一些类的方法或属性,怎么做呢?目前我比较常用的两款IDE"Pycharm"和"VSCode" ...

  9. 理解Python中的类对象、实例对象、属性、方法

    class Animal(object): # 类对象age = 0 # 公有类属性__like = None # 私有类属性def __init__(self): # 魔法方法self.name = ...

最新文章

  1. TiDB 在中通的落地与进化
  2. ultraedit怎么配置java_【转】UltraEdit配置java环境
  3. debug —— list调试命令
  4. 在WinForm中通过HTTP协议向服务器端上传文件(转)
  5. 内中断---汇编学习笔记
  6. 新书品读《三级网络技术预测试卷与考点解析》,欢迎拍砖、跟砖提建议。
  7. 【bzoj3744】Gty的妹子序列 分块+树状数组+主席树
  8. 潘达抽奖盒子小程序源码V3.3.4 附安装包+小程序前端
  9. 有n 个长为m+1 的字符串,求前后m个字符匹配所能形成的最长字符串链:利用弗洛伊德算法求最长路径...
  10. 教你如何找网络上的图片素材
  11. 快速排序—三路快排 vs 双基准
  12. arm 基于qcamera实现_基于Arm平台的研华EPC—R4680工控机实现快速储物柜智能解决方案...
  13. 网站存在后门 收到公安的网络安全限期整改通知书
  14. Boost电路硬件设计实例
  15. 为什么要使用NAS存储设备呢?
  16. 基于FaceNet的实时人脸识别训练
  17. EndNote中英文混排
  18. 我的眉画得浓淡可合时兴?打起黄莺儿,莫教枝上啼。
  19. 最简理解空间三角形中线与边的交点
  20. 鸽主姓名查询成绩_鸽主姓名查询成绩 台鸽怎么查成绩?

热门文章

  1. Hadoop hdfs文件下载代码示例
  2. redis设置为前台运行的方式
  3. 解决服务间调用的三种传统方式
  4. ironpython是什么2.7_是否可以在IronPython2.7.5中使用请求?
  5. springboot spring.config.location外挂配置文件实战
  6. 性能测试(05)-表达式和业务关联-json关联
  7. Zigbee协议栈中OSAL的运行机理
  8. arm交叉编译器gnueabi、none-eabi、arm-eabi等的区别
  9. 为什么要进行字节对齐?
  10. TCP/IP / 如何进行堵塞控制?