Les Allergies
Alimentaires
Posez votre question Signaler

2 fonctions ajax sur un onchange [Résolu]

vero - Dernière réponse le 30 avril 2009 à 15:51
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
Lire la suite 

2 fonctions ajax sur un onchange »

5 réponses
Réponse
+1
moins plus
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 ^^)
Laurent - 30 avril 2009 à 15:45
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 !!!!
vero - 30 avril 2009 à 15:51
Un grand merci!!!
Ajouter un commentaire
Réponse
+0
moins plus
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);
}
}

vero - 30 avril 2009 à 15:21
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.
Ajouter un commentaire
Ce document intitulé « 2 fonctions ajax sur un onchange » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?