2011-03-03 90 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回调。