xmlhttprequest ne lance pas la fonction au bon moment

Par LoupBlanc, il y a 4 ans


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, il y a 4 ans

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, il y a 4 ans

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