2 fonctions ajax sur un onchange [Résolu/Fermé]

Signaler
-
 vero -
Bonjour,

Je souhaite actualiser 2 listes déroulantes à partir d'une autre liste.

Pour cela, j'ai une fonction ajax, qui prend en parametres le nom de la page dans laquelle on recupere les infos de la liste actualisée, le nom de la premiere zone de liste et le nom de la div dans laquelle la liste actualisée apparaitra.

si je met un alert dans la fonction ajax, tout marche tres bien.
Si j'enleve le alert, il n'actualise qu'une seule des listes. a priori, ce serait du a un probleme de temps...

Quelqu un pourrait il m'aider?

Voici le code de la fonction ajax :
<script language="JavaScript">
var httpRequest;
function recup_data(div, reponse)
{
if ( document.getElementById )
{
document.getElementById( div ).innerHTML = reponse;
}
else
{
if ( document.layers )
{
document.div.innerHTML = reponse;
}
else
{
document.all.div.innerHTML = reponse;
}
}

}



function synchro_lst(deuxieme_page,zl,div)
{
// alert("avec ce alert tt marche tres bien !!!");
if (window.XMLHttpRequest)
{ // Mozilla, Safari, ...
httpRequest = new XMLHttpRequest();
if (httpRequest.overrideMimeType)
{
httpRequest.overrideMimeType('text/xml');
}
}
else
{
if (window.ActiveXObject)
{ // IE
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
}
var num = document.frm[""+zl+""].value

httpRequest.onreadystatechange = function()
{
if( httpRequest.readyState == 4 && httpRequest.status == 200 )
{
recup_data( div , httpRequest.responseText );
}
}

httpRequest.open("GET", deuxieme_page + "?num="+num, true);
httpRequest.send(null);
}
</script>

merci beaucoup,
Véro

2 réponses

Messages postés
1158
Date d'inscription
samedi 17 mai 2008
Statut
Membre
Dernière intervention
6 mars 2016
187
Alors essai de passer en mode synchrone

httpRequest.open("GET", deuxieme_page + "?num="+num, false);

avec le false comme 3eme parametre

Je pense que dans le onchange tu lance deux fois la fonction qui lance 2 requetes ajax simultanement ?
Du coup en mode synchrone il va bloquer l'execution du code tant qu'il n'a pas reçu de reponse de la part du serveur et executer les requetes une apres l'autre.

Et a mon avis c'est tout a fait normal car ta valeur "var httpRequest;" est déclarée de maniere globale. Ce qu'il ce passe c'est qu'il lance une premiere fois la fonction ajax qui ce sert de cette variable puis il la relance desuite après ce qui ecrase son contenu avant que le serveur ai repondu. (je sais pas si c'est clair ^^)
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 86817 internautes nous ont dit merci ce mois-ci

Merci énormément Mimiste c'est tout à fait ce que l'on cherchait avec Véro. On avait vraiment tou essayé suel cette petite condition.

Merci mille fois. ça fait vraiment plaisir !!!!
Un grand merci!!!
Messages postés
1158
Date d'inscription
samedi 17 mai 2008
Statut
Membre
Dernière intervention
6 mars 2016
187
salut

c'est etonnant ça voudrais dire que quand tu passe ici

if( httpRequest.readyState == 4 && httpRequest.status == 200 )
{
recup_data( div , httpRequest.responseText );
}

à mon avis readyState est à 4 mais le status n'est pas bon ou pas mis a jour ?

tu devrais peut etre essayer de separer le if et poser des alert pour etre sur de ce qu'il fait

if( httpRequest.readyState == 4)
{
if (httpRequest.status == 200 )
{
recup_data( div , httpRequest.responseText );
} else {
alert ("erreur : " + httpRequest.status);
}
}

merci pour ta reponse.

il passe bien dans la condition 'if (httpRequest.status == 200 ) '
Je n'ai en effet pas le message d'alert 'alert ("erreur : " + httpRequest.status);'.

En plus, si je met un message d'alert dans le if, il y passe bien.