jQuery 发送的所有 Ajax 请求,内部都会通过调用 $.ajax()
函数来实现。通常没有必要直接调用这个函数,可以使用几个已经封装的简便方法,如$.get()和.post()。如果你需要用到那些不常见的选项,那么, $.ajax()使用起来更灵活。
注意: 可以通过$.ajaxSetup()函数来全局设置默认选项
jqXHR 对象
从jQuery 1.5开始,$.ajax() 返回jqXHR对象,该对象是浏览器原生的XMLHttpRequest对象的一个超集。例如,它包含responseText和responseXML属性,以及一个getResponseHeader()方法。当传输机制不是XMLHttpRequest时(例如,一个JSONP请求脚本,返回一个脚本标签时),jqXHR对象尽可能的模拟原生的XHR功能。
jqXHR对象 实现了 Promise 接口, 使它拥有了 Promise 的所有属性,方法和行为。
- jqXHR.done(function(data, textStatus, jqXHR) {});
- jqXHR.fail(function(jqXHR, textStatus, errorThrown) {});
- jqXHR.always(function(data|jqXHR, textStatus, jqXHR|errorThrown) { });
- jqXHR.then(function(data, textStatus, jqXHR) {}, function(jqXHR, textStatus, errorThrown) {});
this在所有的回调中的引用,由这个对象在传递给$.ajax的context参数设置;如果没有指定context参数,this 引用的是Ajax settings本身。
为了向后兼容XMLHttpRequest ,一jqXHR对象将公开下列属性和方法:
- readyState
- status
- statusText
- responseXML and/or responseText 当底层的请求分别作出XML和/或文本响应
- setRequestHeader(name, value) 从标准出发,通过替换旧的值为新的值,而不是替换的新值到旧值
- getAllResponseHeaders()
- getResponseHeader()
- abort()
假如没有onreadystatechange属性,因为不同的状态可以分别在 success , error , complete和statusCode 方法中进行处理。
Data Types
可用的data types 包括 text, html, xml, json, jsonp, and script。
- text 和 html类型返回的数据不会经过处理。这些数据仅仅是简单的传递给成功回调函数,并通过jqXHR对象的responseText获得。
- xml类型在传递给成功回调函数前通过jQuery.parseXML解析成XMLDocument,并通过
jqXHR对象的responseXML获得。 - json类型在传递给成功回调函数前通过jQuery.parseJSON 解析成JSON对象,并通过
jqXHR对象的responseJSON 获得。 - script 类型在传递给成功回调函数前将执行从服务器接收到的JavaScript并作为一个字符串传递给成功回调函数
- jsonp类型会自动给请求的URL后面创建一个查询字符串参数 callback=? 。服务器端应当在JSON数据前加上回调函数名,以便完成一个有效的JSONP请求。$.ajax()将会执行返回的JavaScript,调用JSONP回调函数,在JSON 对象传递给成功回调函数前。
注意:Script和JSONP形式请求不受同源策略的限制。
网友评论