2011-09-14 16 views
0

私は、いくつかの平行したajaxリクエストを実行する必要があるスクリプトを作成しています。私は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:スペイン語の変数の名前についてsrry;

+1

はと現在のonreadystatechangeに置き換えることを提案します。 http://www.erichynds.com/jquery/using-deferreds-in-jquery/ – hvgotcodes

+0

jqueryを使用していませんが、そうだった場合、これはおそらく役立ちます:http://api.jquery.com/ajaxStop/ – Robin

+0

srry imはjavascript/ajaxに新規に追加され、現在はjqueryを使用していません。あなたはいくつかのコードで私を助けることができます。 – Gustavo

答えて

0

あなたはすでに制限が20であることを知っていますが、毎回この値を増やす必要はありません。limit = i;

はちょうどあなたのスクリプトの先頭に

var limit = 20; 

を設定します。

それはあなたが実際に起因するも0

で始まる配列に(この場合は19)の制限のための1つの値以下に設定する必要があるかもしれ、この行にあなたがAJAX要求を完了するたびに追加します。

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

このようにして、実際にどの値が停止しているのか、全く増強されていないのかを確認できます。

+0

console.log()に感謝します。私はちょうどこれで始まって私は言ったようにそれについて知りませんでした。結果は非常に矛盾しているので、時には23 O_Oに到達する準備ができているだけでなく、2に到達したばかりのものもあります。また、var limit = 1は、時にはcampoがnullで、停止する時間があるためです。 – Gustavo

0

あなたのonreadystatechange関数内のindexの値は期待通りではありません。この質問は、すべての時間を尋ねます

(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

ありがとうございましたtry and post back – Gustavo

関連する問題