2011-03-28 61 views
5

我怎麼能通過jQuery知道ajax請求的readystate? 通常,不使用jquery,就會發出一個這樣的AJAX請求:如何獲得jQuery的Ajax就緒狀態

http.open("POST", url, true); 

http.onreadystatechange = function() { 
    if(http.readyState == 4 && http.status == 200) { 
     // do something 
    } 
} 

因此,我可以使用上述代碼輕鬆地跟蹤從1 readyState值爲4,以及類似的示出了加載圖標執行必要的動作當readystate是1.

但通過jquery ajax調用,我如何跟蹤readystate值?

我通過jQuery的調用Ajax這樣的:

$.post('ajax/test.html', function(data) { 
    $('.result').html(data); 
}); 

回答

11

看一看的$.ajax的文檔。你必須通過不同的回調的可能性(也許不是外翻「準備狀態」,但它是足夠的一個指標):

beforeSend(jqXHR, settings)功能
A-預先請求的回調函數,可用於在發送之前修改jqXHR(在jQuery 1.4.x,XMLHTTPRequest)對象。使用此設置自定義標題等。jqXHRsettings映射作爲參數傳遞。這是一個Ajax事件。在beforeSend函數中返回false將取消請求。從jQuery 1.5開始,無論請求類型如何,beforeSend選項都會被調用。

success(data, textStatus, jqXHR)功能,陣列
函數。如果請求成功被調用。該函數傳遞三個參數:從服務器返回的data,根據參數dataType進行格式化;描述狀態的字符串;和jqXHR(在jQuery 1.4.x,XMLHttpRequest)對象中。從jQuery 1.5開始,成功設置可以接受一系列函數。每個函數都會依次調用。這是一個Ajax Event

error(jqXHR, textStatus, errorThrown)功能
一個函數,如果請求不被調用。該函數接收三個參數:jqXHR(在jQuery 1.4.x,XMLHttpRequest)對象中,一個描述發生的錯誤類型的字符串和一個可選的異常對象(如果發生的話)。第二個參數的可能值(null除外)爲"timeout","error","abort""parsererror"。這是一個Ajax Event。截至jQuery 1。5,error設置可以接受一組函數。每個函數都會依次調用。注意:此處理程序不針對跨域腳本和JSONP請求進行調用。

complete(jqXHR, textStatus)功能,陣列
甲功能的請求完成(後successerror回調被執行)時被調用。這個函數會得到兩個參數:jqXHR(jQuery中1.4.x中,XMLHTTPRequest)對象和一個字符串分類所述請求的狀態("success""notmodified""error""timeout""abort",或"parsererror")。從jQuery 1.5開始,complete設置可以接受一組函數。每個函數都會依次調用。這是一個Ajax Event

所以最好的辦法是在傳遞給beforeSend的回調中顯示指標,並將其隱藏在complete中。


例子:

所以,你將不得不重寫代碼爲:

$.ajax({ 
    url: 'ajax/test.html', 
    type: 'POST', 
    beforeSend: function() { 
     // show indicator 
    }, 
    complete: function() { 
     // hide indicator 
    }, 
    success: function(data) { 
     $('.result').html(data); 
    } 
}); 

雖然我不明白你爲什麼使用POST作爲你不發送任何數據(至少在你的示例代碼中)。

+0

感謝您的回覆,您是否可以發佈如何在我的問題中提到的示例jquery POST調用中使用它的示例? – 2011-03-28 10:46:40

+1

@dskanth:我添加了一個例子。 – 2011-03-28 11:24:30

+0

謝謝,實際上我必須通過郵寄發送一些參數,但是我沒有在這個例子中包含它們。 – 2011-03-28 14:23:33

1

使用

$.ajax({ 
url:, 
success:function(){ 

}//This is ready state 4 
}); 

perform necessary action like showing a loading icon when readystate is 1.

對於您可以使用ajaxStartajaxStop

+3

這隻告訴readystate 4,其他狀態呢? – 2011-03-28 06:42:02