Réponse trop rapide ?
Posté : 06 mai 2009, 11:55
Bonjour,
Avant de poster mon code qui me pose problème, j'explique ce qui se passe...
J'ai adapté un code qui permet d'actualiser le contenu d'une liste Select en fonction du choix fait dans une autre (et ainsi de suite, presque à l'infini).
Mon adaptation a consisté à créer une classe en javascript et à permettre de lier deux listes à une liste "parente".
Dans ce cas, j'ai constaté qu'une seule des deux listes était mise à jour. Je me suis donc lancé dans le debuggage, d'abord en affichant des alert(). Et là, oh miracle, la liste se met à jour !
Si je commente mes alerts, le code ne marche plus.
J'ai tracé la page PHP qui est appelée par mon code Ajax : Elle est appelée pour toutes les listes.
Idem, j'ai tracé dans FireFox avec Firebug... et ça marche en faisant une exécution pas à pas ! Mais si je laisse "filer" le programme, ça ne marche plus.
Puisque cela marche en debug, mon code est bon dans l'absolu.
J'ai l'impression qu'en exécution normale, le code est trop "rapide" et que le fait de debugger ou de mettre des alerts lui laisse le temps...
[/code]
Avant de poster mon code qui me pose problème, j'explique ce qui se passe...
J'ai adapté un code qui permet d'actualiser le contenu d'une liste Select en fonction du choix fait dans une autre (et ainsi de suite, presque à l'infini).
Mon adaptation a consisté à créer une classe en javascript et à permettre de lier deux listes à une liste "parente".
Dans ce cas, j'ai constaté qu'une seule des deux listes était mise à jour. Je me suis donc lancé dans le debuggage, d'abord en affichant des alert(). Et là, oh miracle, la liste se met à jour !
Si je commente mes alerts, le code ne marche plus.
J'ai tracé la page PHP qui est appelée par mon code Ajax : Elle est appelée pour toutes les listes.
Idem, j'ai tracé dans FireFox avec Firebug... et ça marche en faisant une exécution pas à pas ! Mais si je laisse "filer" le programme, ça ne marche plus.
Puisque cela marche en debug, mon code est bon dans l'absolu.
J'ai l'impression qu'en exécution normale, le code est trop "rapide" et que le fait de debugger ou de mettre des alerts lui laisse le temps...
Code : Tout sélectionner
if(index > 0)
{
// alert("Traitement "+champsSuivant);
var xhr_object = null;
if(window.XMLHttpRequest) // Si Firefox
xhr_object = new XMLHttpRequest();
else if(window.ActiveXObject) // Si Internet Explorer
xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
else
{ // XMLHttpRequest non supporté par le navigateur
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
return;
}
// On passe en GET le numéro du select à mettre à jour
xhr_object.open("POST", this.pagePHP, true);
xhr_object.onreadystatechange = function() {
if(xhr_object.readyState == 4)
{
if(xhr_object.status == 200)
{
eval(xhr_object.responseText);
}
else
{
alert(xhr_object.status);
}
}
}
xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
// Les données sont préparées dans data avec :
// - params : contient les valeurs des option déjà sélectionnées
// - form : contient le nom du formulaire
// - field : contient le nom du champ suivant
var data = "params="+params+"&form="+p_form.name+"&field="+champsSuivant;
xhr_object.send(data);
}