jquery ajax进度条

时间:2011-03-03 04:30:33

标签: jquery-ui jquery

我正在尝试为我的网站设置ajax进度条。有时多个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函数的alert中,所有发生的事情都是第一个ajax调用到readyState为4,它调用第二个没有在其中运行ajax调用的函数。有没有人知道为什么第二个函数运行但内部的ajax调用没有。提前谢谢。

3 个答案:

答案 0 :(得分:3)

我相信没有参数的AJAX调用语法错误。尝试更改

xhr = $.ajax({});

xhr = $.ajax();

文档说这是你应该如何调用没有参数的函数:http://api.jquery.com/jQuery.ajax/

答案 1 :(得分:0)

他们将其更改为使用他们称之为jqXHR的对象。这些公开readyState,但不允许任意设置其他值。有关详细信息,请参阅jQuery.ajax。但是,您可以尝试使用1.5.1中添加的“xhrFields”选项来添加onreadystatechange回调。

答案 2 :(得分:-8)

我找到了答案。要做到这一点,我需要用户jQuery 1.3.2。版本1.4.2必须以某种方式更改xhr,版本1.5.1完全更改它。感谢大家的回复。