jQuery.ajax()函数基本上只是一个大的jqXHR对象 (本质上是伪造的javaScript xhr对象)。
- jqXHR(jQuery XMLHttpRequest)替换了浏览器本地XMLHttpRequest对象。
- jQuery使用超集API包装浏览器本地XMLHttpRequest对象。
- jQuery XMLHttpRequest(jqXHR)对象由$ .ajax()函数返回。
- jqXHR对象在可能的情况下模拟本机XHR功能。
那怎么办呢? …
- 它处理HTTP请求标头(最后修改的,etag,Content-Type,MIME类型等)。
- 它处理请求的回调(包括承诺回调.done()、. fail()等)
- 它处理为请求设置的所有预过滤器。
- 它处理为请求设置的任何超时。
- 它处理任何跨域调用(包括jsonp)。
在jQuery源代码中,它甚至被注释为Fake xhr
// Fake xhr
jqXHR = {
...
}
jqZHR实现了Promise接口
$ .ajax()返回的jqXHR对象实现Promise接口。 该对象具有Promise的所有属性,方法和行为。 了解更多关于deferred.promise()的信息 。
jqXHR与XMLHttpRequest的向后兼容性
为了与XMLHttpRequest向后兼容,jqXHR对象将公开以下属性和方法:readyState,status,statusText,responseXML和/或responseText(分别具有xml和/或文本响应),getAllResponseHeaders(),getResponseHeader(),abort( )和setRequestHeader()。 由于成功,错误,完成和statusCode涵盖了所有要求,因此jqXHR不为onreadystatechange提供任何支持 。
// Attach deferreds
deferred.promise( jqXHR ).complete = completeDeferred.add;
jqXHR.success = jqXHR.done;
jqXHR.error = jqXHR.fail;
XHR请求的背景信息
XMLHttpRequest(XHR)是一种Web浏览器脚本语言(例如JavaScript)中可用的API。 它用于直接将HTTP或HTTPS请求发送到Web服务器,并将服务器响应数据直接加载回脚本中。
- XMLHttpRequest是由Microsoft设计并由Mozilla,Apple和Google采用的JavaScript对象。
- 尽管它的名字,XMLHttpRequest可以用于检索任何类型的数据,而不仅仅是XML,并且它支持HTTP以外的协议(包括文件和ftp)。
- XMLHttpRequest受到浏览器相同来源策略的限制,出于安全原因,只有在向原始网页提供服务的同一服务器上进行请求时,请求才会成功。
- XMLHttpRequest对象背后的概念最初是由Microsoft Exchange Server 2000的Outlook Web Access开发人员(由Microsoft)创建的。