Несколько запросов AJAX состояние? - PullRequest
0 голосов
/ 14 сентября 2011

Я пишу скрипт, который требует выполнения параллельных запросов 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;
        }       
    }
}

проблема готова, никогда не становится равной пределу.

PS: возиться с именами испанской переменной;

Ответы [ 2 ]

0 голосов
/ 14 сентября 2011

значение индекса внутри вашей функции onreadystatechange не будет тем, что вы ожидаете.

Предложите заменить текущий 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);
0 голосов
/ 14 сентября 2011

Вы уже знаете, что ограничение составляет 20, нет необходимости каждый раз увеличивать его с помощью этого limit = i;.

Просто установите

var limit = 20;

В начале вашего сценария.

Может случиться так, что вам действительно нужно установить на одно значение меньше предела (в данном случае 19) из-за массива, начинающегося с 0.

Кроме того, добавляйте эту строку каждый раз, когда вы завершаете AJAXrequest:

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

Таким образом, вы можете увидеть, на каком этапе готовое значение останавливается или не увеличивается вообще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...