2010-11-05 49 views
8

如何在jQuery的$.ajax方法上調用Ajax就緒狀態?

+4

確切地說是什麼? '$ .ajax'帶來了自己的'success' /'error' /'complete'回調,它們應該滿足您的所有需求 – 2010-11-05 16:31:46

+0

嗨,我想readyState = 1和readyState = 4與jQuery的平等有什麼區別? – tetris 2010-11-05 16:35:40

回答

4

$.ajax()返回XmlHttpRequest對象,因此,如果您真的要訪問它的狀態的變化,你可以這樣做:

var xhr = $.ajax({ ... }); 
xhr.onreadystatechange = function() { alert(xhr.readyState); }; 

但內置的回調應該是你所需要的最使用,特別是successcomplete

要爲大多數情況下,.ajaxStart().ajaxStop()事件......請求觸發之前做的事情,使用beforeSend,或者更恰當的例子來說明,只要任何AJAX活動是怎麼回事加載消息。

+0

謝謝,我會檢查一下。 – tetris 2010-11-05 17:12:22

+0

注意:此代碼僅在jQuery 1.4.4之前工作,因爲1.5版ajax模塊已被完全重寫。我不知道最近版本的解決方案(我希望它測試延遲時間)。 – mgutt 2012-08-11 10:31:01

+0

這不會有*競爭條件* - 或 - 是jQuery使用承諾? – Cody 2015-02-09 22:18:13

1

您應該能夠通過爲您傳入ajax()方法的對象中的successerrorcomplete選項設置回調來獲取所需的全部內容。看看文檔:

http://api.jquery.com/jQuery.ajax/

基本上,它的工作原理是這樣的:

$.ajax({ 
    url: 'ajax/test.html', 
    success: function(data) { 
     alert('Load was performed.'); 
    }, 
    error: function() {alert("error occurred.")}, 
    complete: function() {alert("ajax complete.")} 
}); 

你可以看到文檔的什麼參數,你必須在回調函數訪問。

+0

即時查找的就是readyState,就像當你使用普通的Js一樣,在你的標記填充之前,你使用這個readyState來寫入類似「loading ...」的東西,jQuery的成功,錯誤或者完全不似乎爲我想要的工作。還是你必須用jQuery來僞造它? – tetris 2010-11-05 16:46:49

+0

@tada jQuery方法抽象檢查readystate更改的舊方法。爲什麼不在創建ajax調用之前顯示加載對話框,並將其隱藏在回調函數中?這就是我所做的,從邏輯上講,它比普通的JS方式更有意義。 – treeface 2010-11-05 16:50:48

+0

好的,謝謝.__ – tetris 2010-11-05 17:01:51

4

方法,使用jQuery 2.0.2測試:

$.ajax({ 
    beforeSend: function (jqXHR, settings) { 
     var self = this; 
     var xhr = settings.xhr; 
     settings.xhr = function() { 
      var output = xhr(); 
      output.onreadystatechange = function() { 
       if (typeof(self.readyStateChanged) == "function") { 
        self.readyStateChanged(this); 
       } 
      }; 
      return output; 
     }; 
    }, 
    readyStateChanged: function (xhr) { 
     if (xhr.readyState == 1) { 
      /* Connected! Do something */ 
     } 
    }, 
    url: "..." 
}); 

基本上,我需要的是一個回調readyState之後變爲1(連接),其中,於我而言,是有益的執行長輪詢時,「推「與jQuery通知。