2 fonctions ajax sur un onchange
Résolu
vero
-
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
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 fonctions ajax sur un onchange
- Supercopier 2 - Télécharger - Gestion de fichiers
- Faire 2 colonnes sur word - Guide
- 2 ecran pc - Guide
- Avoir 2 comptes whatsapp sur le même téléphone - Guide
- Ce-35888-2 - Forum PS4
2 réponses
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 ^^)
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 ^^)
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);
}
}
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 mille fois. ça fait vraiment plaisir !!!!