2 fonctions ajax sur un onchange

Résolu
vero -  
 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
A voir également:

2 réponses

Mimiste Messages postés 1149 Date d'inscription   Statut Membre Dernière intervention   206
 
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
Laurent
 
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 !!!!
0
vero
 
Un grand merci!!!
0
Mimiste Messages postés 1149 Date d'inscription   Statut Membre Dernière intervention   206
 
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);
}
}

0
vero
 
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.
0