[AJAX] fonctionnement uniquement en mode synchrone
Bonjour,
Voici le code que j'utilise:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| function ajax(nomduchamp,valeur,id){
if (window.XMLHttpRequest) { // Mozilla, Safari,...
requeteAJAX = new XMLHttpRequest();
if (requeteAJAX.overrideMimeType) {
requeteAJAX.overrideMimeType('text/xml');
}
} else if (window.ActiveXObject) { // IE
try {
requeteAJAX = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
requeteAJAX = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!requeteAJAX) {
alert('Abandon : Impossible de créer une instance XMLHTTP');
return false;
}
requeteAJAX.open("GET","req_maj_aff.php?nomduchamp="+nomduchamp+"&valeur="+escape(valeur)+"&id="+id,true) ;
requeteAJAX.send(null);
requeteAJAX.onreadystatechange = function() {
if(nomduchamp == "nb_cdts" && requeteAJAX.readyState == 4){
var div_ori = document.getElementById('select_ori');
div_ori.innerHTML = "<option>test</option>";
}
};
} |
L'objectif est : suite à la modification d'un champ d'un formulaire d'une page web, je mets à jour la base de données et j'actualise l'élément de formulaire concerné. Pour la mise à jour de la base j'appelle la page req_maj_aff.php avec les paramètres qui vont bien. Cette fonction marche correctement.
Ce que je n'arrive pas à faire c'est mettre à jour l'affichage des éléments de formulaire de ma page.
j'ai notamment une liste dont voici le code d'affichage:
Code:
1 2 3 4 5 6 7 8
| echo "<select id=\"select_ori\" name=\"ori[]\" size=\"".$numrow_ori."\" multiple=\"multiple\">";
for($i=0; $i<$numrow_ori; $i++){
$eta = mysql_result($query_ori,$i,'eta');
$cdts = mysql_result($query_ori,$i,'nb_cdts');
echo"<option value=\"".$eta." - ".$cdts."\">".$eta." ( ".$cdts." )</option>";
}
echo "</select>"; |
Ceci me permet d'alimenter cette liste avec les données d'une base. Le code est en PHP. Sur un autre élément du formulaire j'appelle la fonction ajax('nb_cdts',this.value,'1') sur la commande onblur de cet élément.
Deux questions:
1) Ceci ne fonctionne que en mode synchrone (requeteAJAX.open("GET","req_maj_aff.php?nomduchamp="+nomduchamp+"&valeur="+escape(valeur)+"&id="+id,true) ;
Si on remplace le 'true' à la fin par un 'false' (ce qui correspond alors au mode asynchrone) ça ne fonctionne plus. Pourquoi?
2)Pourquoi ma liste n'est-elle pas mise à jour? Je devrais normalement obtenir une liste avec une seule valeur 'test'.
Merci