JQuery XMLHttpRequest對象 JqXHR

在 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 對象的屬性和方法:javascript

注意:html

jQuery.ajax返回的是jqXHR對象,它是瀏覽器原生XMLHttpRequest對象的一個超集,並實現了Promise接口。使它擁有了Promise的全部屬性,方法和行爲。爲了讓回調函數名字統一,便於$.ajax中使用,jqXHR也提供了.error(),.success(),.complete(),可是因爲版本的升級相應的.fail(),.done(),.always()代替了前三個方法。java

使用過程遇到的問題:web

緣由是由於我使用的jQuery版本太高,對jqXHR的success回調不支持,改爲done便可解決。ajax

 

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 請求對應狀態執行的回調函數。promise

而 $.ajax() 方法執行完後會返回一個 jqXHR 對象。由於,咱們其實大能夠不在 $.ajax() 方法的參數中指定回調,轉而使用鏈式寫法,經過 jqXHR 對象的各個方法來指定回調。瀏覽器

像 $.get(),$.post() 這一類對 $.ajax() 進行了再封裝的方法,方法自己的參數不支持設置 error 等回調,那麼咱們就能夠用上面所說的方法來達到此目的。ide

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

 

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

 

 

相關文章連接:http://www.cnblogs.com/webFrontDev/p/3265568.html函數

相關文章
相關標籤/搜索