2011-03-03 182 views
1

我正在嘗試爲我的網站設置ajax進度條。有時,多個Ajax調用鏈接在一起,這是我的代碼jquery ajax進度條

var xhrs = []; 


function ajaxCall(){ 
    xhr = $.ajax({ 
     ...other ajax code... 
     success: function(data){ 
      anotherAjaxCall(data); 
     } 
    }); 
    xhr.onreadystatechange = reportStatus; 
    xhrs.push(xhr); 
} 

function anotherAjaxCall(data){ 
    xhr = $.ajax({ 
     ...other ajax code... 
    }); 
    xhr.onreadystatechange = reportStatus; 
    xhrs.push(xhr); 
} 
...lots more functions that make ajax calls.... 

function reportStatus(){ 
    var overallPercent = 0; 
    for(i = 0; i < xhrs.length; i++){ 
     overallPercent += (xhrs[i].readyState * 20); 
    } 
    var percent = overallPercent/xhrs.length; 
    alert(percent + " = " + overallPercent + "/" + xhrs.length); 
    //update progress bar 
    updateProgressPercentage(percent); 
} 

從reportStatus功能一切發生的警報是第一個Ajax調用得到4 readyState的,它調用不運行AJAX的第二個功能打電話給它。有沒有人有任何想法爲什麼第二個函數運行,但內部Ajax調用沒有。提前致謝。

+1

我假設'anotherAjaxCall'實際上並沒有定義爲'xhr = $ .ajax({});'? – mellamokb 2011-03-03 04:34:43

+0

是的,我應該讓這更明確的抱歉。 – 2011-03-03 04:41:06

+0

爲什麼你想使用ajax?以及您如何計劃持續獲得響應並使用它? – 2011-03-03 04:49:53

回答

-8

我找到了答案。要做到這一點,我需要用戶jQuery 1.3.2。版本1.4.2必須以某種方式更改xhr,版本1.5.1完全改變它。感謝大家的回覆。

+16

現在任何人閱讀:**不要**僅僅因爲這個原因使用古老的jQuery版本! – ThiefMaster 2012-05-11 22:25:08

3

我相信你有語法錯誤的AJAX調用不帶參數。嘗試改變

xhr = $.ajax({}); 

xhr = $.ajax(); 

的文件說,這是你應該如何調用該函數不帶參數:http://api.jquery.com/jQuery.ajax/

+0

ajax調用中有參數,我只是刪除它們以減少此頁面上的代碼。 – 2011-03-03 04:36:58

+0

哦,我明白了。那不好意思了。 – Aaron 2011-03-03 04:39:00

0

他們改變它使用他們所說的jqXHR對象。這些公開readyState,但不允許任意設置其他值。有關更多詳細信息,請參閱jQuery.ajax。但是,您可以嘗試使用1.5.1中添加的「xhrFields」選項來添加onreadystatechange回調。