Boucle sur un script Ajax

Résolu
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 - 12 nov. 2007 à 11:16
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 - 13 nov. 2007 à 12:13
    Salut à vous ô forts du JS...
Je suis une fois de plus en train de galérer... enfin cette fois ci je crois que c'est enfin sur un problème digne de ce nom...

je vous explique le principe.

j'ai un tableau html de 4 colones de large par N de haut avec des input texte dans chaque case.
le nombre de ligne de ce tableau est aléatoire et est remplis en fonction d'une BDD via un moteur de template. donc si j'ai trois lignes dans ma bdd je vais afficher ma page avec les input préremplis sur trois lignes.

l'idée est que je verrifie les valeurs entrées dans les input grace à un script ajax. Si je ne les retrouve pas dans ma bdd (une autre table) alors j'affiche la ligne en question sur fond rouge...

bon tout ça marche quand j'envoie le test ligne par ligne... le script ajax fonctionne bien.

mais maintenant je veux créer une fonction qui boucle sur toutes les lignes du tableau pour faire une verrif globale.

j'ai donc créé une boucle for qui appelle ma fonction de verrif ajax en lui passant les bons paramètres

//fonction qui va lancer la verif sur toutes les lignes du tableau
            function verrifAllRef() {
            // alert (document.getElementById('dTable').childNodes.length);
            for ( var b=0; b<document.getElementById('dTable').childNodes.length; b++ )
                {
                 if ( document.getElementById('dTable').childNodes[b].tagName == 'TR') {
                // alert( document.getElementById('dTable').childNodes[b].tagName + document.getElementById('dTable').childNodes[b].id );
                 // selection dynamique de la cellule du tableau parcouru
                 cellule = document.getElementById('dTable').childNodes[b].getElementsByTagName('td')[0];
            //     alert (cellule);
                 //on lance la verif ajax pour cette cellule
                 verrifRef('ajax_verrif_ref.php', cellule);
                 }
                }
            }

La fonction ajax envoie donc en boucle trois requettes HTTP avec des valeurs en post...
mais le problème c'est que quand les trois réponses http arrivent seule la dernière est prise en compte (d'après ce que j'ai pu comprendre sur firebug) et donc une seule ligne change de couleur au lieu des trois ...

j'aimerai donc savoir comment faire pour dire à mon script d'attendre la réponse avant de relancer une requette à HTTP via ma fonction ajax...

euuh ...j'espère que c'est pas trop charabia ce que je vous ai raconté parce que là je coince vraiment ...
merci à vous
@++

6 réponses

cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
12 nov. 2007 à 16:06
dans le
        xml.open("POST ou GET", "url voulue", true ou false);

         true = asynchrone, n'attend pas la réponse pour continuer
         false=synchrone, attend la réponse pour continuer

         synchrone jamais testé, pas sûr que "ce soit bien" d'utiliser !?!
          et comme l'asynchrone est simple à gérer...

<hr />                Cordialement            Bul        
3
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
12 nov. 2007 à 12:01
    Bon d'après ce que je lis depuis tout à l'heure une solution serait peut être de faire une pause entre chaque appel de la fonction ajax

j'ai testé

//fonction qui va lancer la verif sur toutes les lignes du tableau
            function verrifAllRef() {
            // alert (document.getElementById('dTable').childNodes.length);
            for ( var b=0; b<document.getElementById('dTable').childNodes.length; b++ )
                {
                 if ( document.getElementById('dTable').childNodes[b].tagName == 'TR') {
                // alert( document.getElementById('dTable').childNodes[b].tagName + document.getElementById('dTable').childNodes[b].id );
                 // selection dynamique de la cellule du tableau parcouru
                 cellule = document.getElementById('dTable').childNodes[b].getElementsByTagName('td')[0];
            //     alert (cellule);
                 //on lance la verif ajax pour cette cellule
                verrifRef('ajax_verrif_ref.php', cellule);
                 setTimeout("rien()",1000);
                 }
                }
            }
           
            function rien() {
            return true;
            }

mais apparament la boucle for ne tient pas compte de ça ..elle boucle à donf quand même :(
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
12 nov. 2007 à 12:28
Bonjour,
    de toutes manières mettre un délai n'est pas fiable.

    ne pas faire une boucle, mais

  
    index=0
    appel fonction ajax

dans fonction ajax

    ...
    xml.onreadystatechange = function()
    {    if(xml.readyState == 4)
          { index++             si index<maxi> appel fonction ajax
          }
    }
    ...

<hr />                Cordialement            Bul        
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
12 nov. 2007 à 12:31
setTimeout ce n'est pas "attendre un certain temps",
c'est lancer la fonction citée après un délai, et continuer
    à l'instruction suivante.
<hr />                Cordialement            Bul        
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
12 nov. 2007 à 15:43
    Yes ! merci pour ces éclairages.
Entre temps j'ai changé de technique et je vais faire mes tests au moment de la génération du template ... c'est plus simple au final...
j'ai lu sur quelques posts que ça parlait d'ajox synchrone et asynchrone ... ça corresponds à quoi ça exactement ?

@+
0
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
13 nov. 2007 à 12:13
    ah ouai .. ça peut servir ...
imagines ça dans une boucle ... on attends la réponse avant de continuer la bouche c'est bien ça ? donc ce serai impec pour ce genre de traitement en boucle :) :)
Bon du coup pour ce problème j'ai géré autrement mais le cas se représentra surement...
@+
0
Rejoignez-nous