maListe = xxx.liste.lenth
for(let i, i< maListe, i++){
    var nomAttribut = xxx.liste[i].nom;
    var numAttribut = xxx.liste[i].num;

    requeste = new XMLHttpRequeste();

    var url = "url?attribut1" + nomAttribut + "&attribut2" + numAttribut;
    requeste.open("GET", url);
    requeste.onload = function(){
        if(this.readyState == 4 && this.status == 200) {
            //code permettant de changer l'affichage de ma page 
        }

    };
    requeste.sen(null);

J'aimerais qu'à chaque ittérations, une requête s'envoie et une foie le retour de celle-ci exécute le code se trouvant dans le if(){}.

Malheureusement, la boucle for va se faire entièrment avant la fin des requêtes (c'est ce que je pense) et mon code situé dans le if ne va être exécuté qu'au dernier passage dans la boucle. Si je passe ma requête en synchrone (requeste.open("GET", url, false); cela fonctionne mais la boucle prend beaucoup trop de temps

Si quelqu'un à un petit indice du comment du pourquoi je suis prenneur.

2 réponses


MickaelTD
Réponse acceptée

Hello, si tu ne cible pas IE11 (ou si c'est le cas avec un polyfill), tu peux essayer de le faire avec fetch plutôt.

xxx.liste.forEach(list => {
    const {name, nom} = list
    const url = `url?attribut1=${name}&attribut2=${num}`

    fetch(url)
    .then(response => {
        if(response.ok) response.json().then(data => la suite de ton code si tt va bien)
        else throw new Error('Mon message d\'erreur')
     })
     .catch(err => console.log(err))
 })
LoupBlanc
Auteur
Réponse acceptée

Nickel merci bien de ta raiponse, tu m'as permis de me débloquer.