[AJAX] Plusieurs Champs mis à jour à partir d'un seul

Souboc Messages postés 11 Date d'inscription mardi 13 décembre 2005 Statut Membre Dernière intervention 8 septembre 2006 - 15 févr. 2006 à 09:17
Souboc Messages postés 11 Date d'inscription mardi 13 décembre 2005 Statut Membre Dernière intervention 8 septembre 2006 - 15 févr. 2006 à 14:28
Bonjour,
En m'inspirant d'un tuto, je souhaite mettre à jour plusieurs champs de formulaire en fonction du choix fait dans une dropdown. Voilà mon code :
Code:

function go(){
UpdateName();
UpdateCustomer();
}
/**
* This method will change the project name in the textbox according to the selected project.
*/
function UpdateName(){
getXhr();
// On défini ce qu'on va faire quand on aura la réponse
xhr.onreadystatechange = function(){
// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
if(xhr.readyState 4 && xhr.status 200){
NewHTMLCode = xhr.responseText;
alert(xhr.responseText);
// On se sert de innerHTML pour rajouter les options a la liste
document.getElementById('Name').innerHTML = NewHTMLCode ;
}
}

// Ici on va voir comment faire du post
xhr.open("POST","ModifyProject-FieldUpdate.php",true);
// ne pas oublier ça pour le post
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
// ne pas oublier de poster les arguments
// ici, l'id du projet
sel = document.getElementById('Project');
projectid = sel.options[sel.selectedIndex].value;
xhr.send('ProjectID='+projectid+'&FieldNumber=1');
}
/**
* This method will change the default customer in the Customer selection dropdown according to the selected project.
*/
function UpdateCustomer(){
getXhr();
// On défini ce qu'on va faire quand on aura la réponse
xhr.onreadystatechange = function(){
// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
if(xhr.readyState 4 && xhr.status 200){
NewHTMLCode = xhr.responseText;
// On se sert de innerHTML pour rajouter les options a la liste
document.getElementById('Customer').innerHTML = NewHTMLCode ;
}
}

// Ici on va voir comment faire du post
xhr.open("POST","ModifyProject-FieldUpdate.php",true);
// ne pas oublier ça pour le post
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
// ne pas oublier de poster les arguments
// ici, l'id du projet
sel = document.getElementById('Project');
projectid = sel.options[sel.selectedIndex].value;
xhr.send('ProjectID='+projectid+'&FieldNumber=2');
}



Le problème est le suivant :

La seconde fonction appelée par go() s'execute correctement mais la première ne s'execute pas : en insérant des alert je me suis rendu compte que le programme ne rentrait pas dans le Code:
if(xhr.readyState 4 && xhr.status 200)
...

Avez vous une idée de solution ? Peut-être suis en train de faire fausse route, le fonction go appelée au changement de choix d'une liste deroulante va elle meme appeler une douzaine de fonctions qui mettront chacune à jour une partie de formulaire... Peut être y'a t'il une meilleure façon de proceder ?

Merci !

3 réponses

Souboc Messages postés 11 Date d'inscription mardi 13 décembre 2005 Statut Membre Dernière intervention 8 septembre 2006
15 févr. 2006 à 09:58
:/ alors en testant et retestant je me suis rendu compte que quelques fois ca rentrait dans le if mais que ça me mettait le code correspondant au second case du switch...

Fichier ModifyProject-FieldUpdate.php :
Code:
<?php
global $dbcnx;
switch ($_POST["FieldNumber"]) {
case 1:
echo "<select size="1" name='Customer'>";
if(isset($_POST["ProjectID"])){
$res = mysql_query("SELECT Name FROM project
WHERE ProjectID=".$_POST["ProjectID"]."",$dbcnx);
while($row = mysql_fetch_assoc($res)){
echo "";
}
}
break;
case 2:
echo "<select size="1" name='Customer'>";
if(isset($_POST["ProjectID"])){
$res = mysql_query("SELECT c.CustomerID as id,c.Name as name FROM customer c, project p
WHERE p.ProjectID=".$_POST["ProjectID"]." AND p.CustomerID=c.CustomerID ORDER BY c.Name",$dbcnx);
while($row = mysql_fetch_assoc($res)){
echo "<option selected value='".$row["id"]."'>".$row["name"]."</option>";
}
$res = mysql_query("SELECT c.CustomerID as id,c.Name as name FROM customer c, project p
WHERE p.ProjectID=".$_POST["ProjectID"]." AND p.CustomerID!=c.CustomerID ORDER BY c.Name",$dbcnx);
while ($val = mysql_fetch_array($res)){
echo "<option value='".$val["id"]."'>".$val["name"]."</option>";
}
}

echo "</select>";
break;
case 3:
echo "probleme";
break;
case 4:
echo "probleme";
break;
case 5:
echo "probleme";
break;
case 6:
echo "probleme";
break;
case 7:
echo "probleme";
break;
case 8:
echo "probleme";
break;
case 9:
echo "probleme";
break;
case 10:
echo "probleme";
break;
case 11:
echo "probleme";
break;
}
?>
0
Souboc Messages postés 11 Date d'inscription mardi 13 décembre 2005 Statut Membre Dernière intervention 8 septembre 2006
15 févr. 2006 à 11:03
Bon en fait en mettant l'appel à la fonction UpdateCustomer(); sans la fonction UpdateName après avoir récupéré la main du serveur (et donc en virant la fonction go ) Ca devrait marcher mieux d'après ce que j'ai compris car XHR est asynchrone...
C'est ce que j'ai fait mais j'ai le meme resultat... mon second champ est bien updaté par la fonction UpdateCustomer, appelée par UpdateName, mais celle ci n'update pas le premier champ qu'elle est censée updater...

POURQUOI TANT DE HAINE ??
0
Souboc Messages postés 11 Date d'inscription mardi 13 décembre 2005 Statut Membre Dernière intervention 8 septembre 2006
15 févr. 2006 à 14:28
Bon... fin du monologue ça fonctionne maintenant j'ai déplacé l'appel de fonction et c'est ok !
0
Rejoignez-nous