Partage
  • Partager sur Facebook
  • Partager sur Twitter

Ajax - XMLHttpRequest récursives en asynchrone

    15 février 2011 à 11:25:10

    Bonjour à tous,

    Je bloque depuis plusieurs jour sur la possibilité d'effectuer des requêtes AJAX récursives en asynchrone.
    Je m'explique, le but serait de lancer une série de XMLHttpRequest l'une après l'autre sur une liste d'ip indiquer par l'utilisateur.

    J'ai bien pensé au mode synchrone mais le problème est qu'il bloque la page (plus possible de scroller) tant que AJAX n'a pas fini.

    J'utilise une boucle for pour parcourir ma liste d'ip et lancer les requêtes mais je ne parviens pas à mettre en dernière action "attendre que readyState == 4".

    Quelle solution puis-je utiliser...
    Y a t'il un moyen d'autoriser à scroller en mode synchrone?
    Puis-je mettre ma boucle en pose tant que la réponse n'est pas reçu?


    for (var i = 0, c = listIp.length; i < c; i++) {
    
            var TdResp = document.getElementById("response_" + listIp[i]);
    
            var xhr = getXMLHttpRequest();
    
            xhr.onreadystatechange = function() { 
                var buttonsend = document.getElementById("buttonsend");
    
                if (xhr.readyState == 4 && xhr.status == 200) {
                    document.getElementById("loader").style.display = "none"; // Chargement du loader + suppression du boutton
                    buttonsend.type = "button";
    
                    TdResp.innerHTML = xhr.responseText;
    
                } else if (xhr.readyState < 4) {
                    document.getElementById("loader").style.display = "inline";
                    buttonsend.type = "hidden";
    
                    TdResp.innerHTML = "Connexion en cours...";
                }
    
            };
    
            xhr.open("POST", "handlingMassiveTools.php", true);
            xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            xhr.send("action=" + action + "&ipaddr=" + listIp[i]);
    
            }
    


    Edit:
    J'ai finalement trouvé une solution, si ça peut aider d'autres personnes dans mon cas...
    J'ai supprimé ma boucle "for" et je déclenche la requête suivante dans mon bloc "xhr.readyState == 4" de la façon suivante:

    if (xhr.readyState == 4 && xhr.status == 200) {
        document.getElementById("loader").style.display = "none";
        buttonsend.type = "button";
    
        TdResp.innerHTML = xhr.responseText;
    
        i++;    // On boucle tant qu'il y a une ip
        TdResp = document.getElementById("response_" + listIp[i]);
        if (typeof(listIp[i]) != "undefined") {
            xhr.open("POST", "handlingMassiveTools.php", true);
            xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            xhr.send("action=" + action + "&ipaddr=" + listIp[i]);
        }
    }
    
    • Partager sur Facebook
    • Partager sur Twitter

    Ajax - XMLHttpRequest récursives en asynchrone

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown