2013-10-11 75 views
1

我正在嘗試更新我的ajax請求函數以顯示響應的各個狀態。Ajax和readyState

然而,我發送請求後我得到的是readyState = 1,然後它直接跳轉到readyState = 4,我得到服務器的完整響應。

爲什麼我沒有準備好狀態2和3?

當我嘗試使用本地瀏覽器時,例如

xmlhttp2 = new XMLHttpRequest() 

發送相同的請求得到我readyStates 1,2,3,4在我的回調:

xmlhttp2.onreadystatechange 

但與JQuery的AJAX輔助功能沒有。爲什麼會發生這種情況?

這裏是我的代碼:

var jqXHR = $.ajax(
{ 
    data: requestForm, //my json request 
    type: req_type, // could be post or get 
    url: script, // php script 
    async: true, 
    success: function(response,textStatus, xhr) 
    { 
      renderIt(response); 
    }, 

    error: function(xhr, textStatus, errorThrown) 
    { 
     var errText = "<b>Error "+xhr.status+" : "+xhr.reponseText+" , "+textStatus+", "+errorThrown+" </b>"; 
     $('#'+div).append(errText); 
    } 
}); 

jqXHR.fail(function(data, textStatus, jqXHR) 
{ 
    var errText = "<b>Error "+jqXHR.status+" : "+jqXHR.reponseText+" , "+textStatus+", "+" </b>"; 
    $('#'+div).html(errText); 
}); 

switch(jqXHR.readyState) 
{ 
case 1: 
    $('#'+div).html("\n<center> Connected to Server...<br/> <img src='images/loading.gif' height=30 width=30></center>\n"); 
    break; 
case 2: 
    $('#'+div).html("\n<center> Request Recieved...<br/> <img src='images/loading.gif' height=30 width=30></center>\n"); 
    break; 
case 3: 
    $('#'+div).html("\n<center> Receiving Responses.....<br/> <img src='images/loading.gif' height=30 width=30></center>\n"); 
    $('#'+div).append(xhr.responseText); 
    break; 
default: 
    $('#'+div).html("\n<center> Awaiting Results.."+jqXHR.readyState+"<br/> <img src='images/loading.gif' height=30 width=30></center>\n"); 
    break;          
} 
+0

你意識到switch語句只執行一次,對嗎? –

+0

你是對的!如何綁定由readyState更改觸發的交換機代碼? – seedhom

+0

使用readystatechange事件?但是請注意,不需要使用jQuery的ajax方法。 –

回答

2

你只jQuery中拿到1和4,因爲它的成功回調只觸發一次Ajax請求完成,並it does not expose a callback for the readystatechange event

因此,如果由於某種原因需要對此事件進行一些處理,則需要直接使用XMLHttpRequest。

+0

基於這個答案我想我必須放棄我的努力來做出這個改變。我開始製作它,因爲在處理完成之前一些請求會收到幾個數據塊,我想向等待的用戶顯示狀態。 – seedhom