多个ajax请求状态

Multiple ajax request state?

本文关键字:状态 请求 ajax 多个      更新时间:2023-09-26

我正在编写一个脚本,需要执行一些并行的ajax请求。我使用ajax数组,但我想执行一些代码(使一些标签可见)当所有的请求完成。这是代码,希望你能帮助我。

function Update_All(){
    var loading = document.getElementById("loading_image");
    var actualizacion_completa = document.getElementById("actualizacion_completa");
    loading.style.display = "";
    actualizacion_completa.style.display = "none";
    var i=1;
    var ajax= new Array(20);//objetoAjax();
    var limit = 1;
    var ready = 1;
    for (i=1;i<=20;i++)
    {
        var index = i-1;
        ajax[index] = objetoAjax();
        var voatencion = document.getElementById("idatencionf"+i);
        var vohoras = document.getElementById("vhorasf"+i);
        var vtarifa = document.getElementById("tarifaclientef"+i);
        var voexonerado = document.getElementById("vexoneradof"+i);
        var voaprobado = document.getElementById("vaprobadof"+i);
        var campo = document.getElementById("f"+i+"c1");
        if(typeof(campo) != 'undefined' && campo != null){
            var valor = 1;
            if(campo.innerHTML=="Si") valor = 2;
                ajax[index].open("GET","update.php?atencion="+voatencion+"&opc="+5+"&valor="+valor+"&exonerado="+voexonerado.value+"&tarifa="+vtarifa.value+"&horas="+vohoras.value);
            ajax[index].send(null);
            limit = i;
            ajax[index].onreadystatechange=function() {
                if (ajax[index].readyState==4 && ajax[index].status == 200) {
                    ready++;
                    if(ready == limit){
                        loading.style.display = "none";
                        actualizacion_completa.style.display = "";
                    }
                }
            }
        }
        else{
            break;
        }       
    }
}

问题已经准备好了,永远不会等于极限。

你已经知道极限是20,没有必要每次都用这个limit = i;来增加它。

设置> 你的脚本开头。

由于数组从0开始,您实际上可能需要为限制设置一个值(在本例中为19)。

另外,在每次完成AJAX请求时添加这一行:

console.log('ready = ' + ready);

这样你就可以看到ready在哪个值停止,或者它根本没有增加。

您的onreadystatechange函数中的index值将不是您所期望的。

建议将当前onreadystatechange替换为:

(function(ajaxItem, ready) {
    ajaxItem.onreadystatechange = function() {
      if (ajaxItem.readyState==4 && ajaxItem.status == 200) {
        ready++;
        if(ready == limit){
            loading.style.display = "none";
            actualizacion_completa.style.display = "";
        }
    }
})(ajax[index], ready);