Boucle sur un script Ajax [Résolu]

Messages postés
329
Date d'inscription
samedi 4 janvier 2003
Dernière intervention
29 mars 2015
- 12 nov. 2007 à 11:16 - Dernière réponse :
Messages postés
329
Date d'inscription
samedi 4 janvier 2003
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
@++
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
13619
Date d'inscription
jeudi 13 février 2003
Dernière intervention
15 octobre 2013
12 nov. 2007 à 16:06
3
Merci
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        

Merci cs_bultez 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de cs_bultez
Messages postés
329
Date d'inscription
samedi 4 janvier 2003
Dernière intervention
29 mars 2015
12 nov. 2007 à 12:01
0
Merci
    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 :(
Commenter la réponse de cs_caviar
Messages postés
13619
Date d'inscription
jeudi 13 février 2003
Dernière intervention
15 octobre 2013
12 nov. 2007 à 12:28
0
Merci
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        
Commenter la réponse de cs_bultez
Messages postés
13619
Date d'inscription
jeudi 13 février 2003
Dernière intervention
15 octobre 2013
12 nov. 2007 à 12:31
0
Merci
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        
Commenter la réponse de cs_bultez
Messages postés
329
Date d'inscription
samedi 4 janvier 2003
Dernière intervention
29 mars 2015
12 nov. 2007 à 15:43
0
Merci
    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 ?

@+
Commenter la réponse de cs_caviar
Messages postés
329
Date d'inscription
samedi 4 janvier 2003
Dernière intervention
29 mars 2015
13 nov. 2007 à 12:13
0
Merci
    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...
@+
Commenter la réponse de cs_caviar

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.