Partage
  • Partager sur Facebook
  • Partager sur Twitter

Ajax

Pb de formulaire

    22 août 2011 à 12:13:05

    Bonjour, j'essaie de créer un formulaire qui permet de choisir une société dans une liste déroulante qui permet de récupérer la liste des personnes de cette société dans une autre liste déroulante. J'ai déjà réalisé un script de ce genre qui fonctionnait bien mais celui ci bug je ne comprends pas...

    Voici mon code :
    <?php
    	include("requetes.php");
    	
    	$societe = NomSociete();
    ?>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    	<head>
    	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    	<script type="text/javascript" src="oXHR.js"></script>
    	<script type="text/javascript">
    		function request(oSelect)
    		{
    			var value = oSelect.options[oSelect.selectedIndex].value;
    			var xhr = getXMLHttpRequest();
    			
    			xhr.onreadystatechange = function() {
    				if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
    					readData(xhr.responseXML);
    					document.getElementById("loader").style.display = "none";
    				} else if (xhr.readyState < 4) {
    					document.getElementById("loader").style.display = "inline";
    				}
    			};
    			
    			xhr.open("POST", "interlocuteur.php", true);
    			xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    			xhr.send("id_societe=" + value);
    		}
    
    		function readData(oData)
    		{
    			var nodes = oData.getElementsByTagName("item");
    			var oSelect = document.getElementById("interlocuteur");
    			var oOption,oInner;
    			
    			oSelect.innerHTML = "";
    			for (var i=0, c=nodes.length; i<c; i++)
    			{
    				oOption = document.createElement("option");
    				oInner  = document.createTextNode(nodes[i].getAttribute("name"));
    				oOption.value = nodes[i].getAttribute("value");
    				oOption.value = nodes[i].getAttribute("id");
    				
    				oOption.appendChild(oInner);
    				oSelect.appendChild(oOption);
    			}
    		}
    	</script>
    	</head>
    	<body>
    	<form method="post" action="" enctype="multipart/form-data">
    		<fieldset>
    			<table>
    				<tr><td>Société</td><td><select name="societe" onchange="request(this);">
    				<option value="none">Choisir une soci&eacute;t&eacute;</option>
    				<?php
    					foreach($societe as $i => $value)
    					{
    						echo '<option value="'.$societe[$i]['id_societe'].'">'.$societe[$i]['nom_societe'].'</option>';
    					}
    				?>
    				</select></td></tr>
    				
    				<tr><td> Interlocuteur </td><td><select id="interlocuteur" name="interlocuteur"></select></td></tr>
    				
    			</table>
    		</fieldset>
    		<center><input type="submit" value="Envoyer"/></center>
    	</form>
    	</body>
    </html>
    


    puis le page interlocuteur.php:

    <?php 
    	include('requetes.php');
    
    	header("Content-Type: text/xml");
    	echo "<?xml version='1.0' encoding='utf-8'?>";
    	echo "<list>";
    	
    	$id_societe = (isset($_POST["id_societe"])) ? htmlentities($_POST["id_societe"]) : NULL;
    
    	if ($id_societe)
    	{
    		$tabInterlocuteur = nomClient($id_societe);
    		for($i=0; $i<sizeof($tabInterlocuteur); $i++)
    		{
    			echo "<item value='".$tabInterlocuteur[$i]['nom_client']."' id='".$tabInterlocuteur[$i]['id_client']."' name='".strtoupper([$i]['id_client'])."' />";
    		}
    	}
    
    	echo "</list>";
    ?>
    


    mes requêtes fonctionnent bien, je les ai vérifiées. Par contre, j'ai plusieurs erreurs dans la console JS:
    "oData is null"
    "document.getElementById("loader") is null"

    J'ai testé en mettant des alerts, la fonction readData et plus précisément la ligne du var nodes ne fonctionne pas.

    Si quelqu'un a une idée, je suis preneur merci ! :)
    • Partager sur Facebook
    • Partager sur Twitter
      22 août 2011 à 12:26:21

      où est appelée la fonction request?
      • Partager sur Facebook
      • Partager sur Twitter
        22 août 2011 à 12:31:11

        Dans le select de la société :

        <tr><td>Société</td><td><select name="societe" onchange="request(this);">
        
        • Partager sur Facebook
        • Partager sur Twitter
          22 août 2011 à 12:56:53

          request(this): le this doit normalement etre le nom de la fonction callback, donc ici tu devrai avoir: request(readData).

          Pour récupérer this, utilise le DOM.

          Il existe peut être une autre solution, je ne suis pas un pro en js mais moi c'est ce que je fais et sa marche.
          • Partager sur Facebook
          • Partager sur Twitter
            22 août 2011 à 13:01:29

            euh.. C'est à dire ? J'ai pas tout compris là ^^ A la place du this je mets readData ? Je viens de le faire et cette fois en erreur JS j'ai oSelect.selectedIndex is undefined
            • Partager sur Facebook
            • Partager sur Twitter
              22 août 2011 à 13:50:54

              tiens, je te met le principe du code que j'ai utilisé pour quelque chose de semblable:

              function	load_comment(callback)
              	{
              		var xhr = getXMLHttpRequest();
              		var url = "'. $url .'";
              	 
              	xhr.onreadystatechange = function() {
              		if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)){
              			callback(xhr.responseText);
              		}
              	};
              		xhr.open("POST", "./lib/plugins/comment/ajax_load_comment.php", true);
              		xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
              		xhr.send("action=load&url="+url);
              	}
              	
              	function affComment(comment)
              	{
              		...
              	}
              	window.onload = load_comment(affComment);
              


              Dans "./lib/plugins/comment/ajax_load_comment.php", je fais echo de comment et se que affComment reçoit.

              c'est quoi que tu n'a pas compris?
              • Partager sur Facebook
              • Partager sur Twitter
                22 août 2011 à 14:03:16

                C'est vrai que c'est très similaire mais je n'arrive pas à régler mon problème, la deuxième liste ne se remplit pas... :S Je ne comprend pas pourquoi le nodes est incorrect alors que dans un autre script cela marche.
                Voici mon autre script (cette fois fonctionnel..):

                function request(oSelect)
                	{
                		var value = oSelect.options[oSelect.selectedIndex].value;
                		var xhr   = getXMLHttpRequest();
                		
                		xhr.onreadystatechange = function() {
                			if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
                				readData(xhr.responseXML);
                				document.getElementById("loader").style.display = "none";
                			} else if (xhr.readyState < 4) {
                				document.getElementById("loader").style.display = "inline";
                			}
                		};
                		
                		xhr.open("POST", "client.php", true);
                		xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
                		xhr.send("IdSociete=" + value);
                	}
                	
                	function readData(oData)
                	{
                		var nodes = oData.getElementsByTagName("item1");
                		var oSelect = document.getElementById("client");
                		var oOption, oInner;
                		
                		oSelect.innerHTML = "";
                		for (var i=0, c=nodes.length; i<c; i++)
                		{
                			oOption = document.createElement("option");
                			oInner  = document.createTextNode(nodes[i].getAttribute("name"));
                			oOption.value = nodes[i].getAttribute("value");
                			oOption.value = nodes[i].getAttribute("id");
                			
                			oOption.appendChild(oInner);
                			oSelect.appendChild(oOption);
                		}
                		
                		var nodes2   = oData.getElementsByTagName("item2");
                		var oSelect2 = document.getElementById("equipement");
                		var oOption2, oInner2;
                		
                		oSelect2.innerHTML = "";
                		for (var i=0, c=nodes2.length; i<c; i++)
                		{
                			oOption2 = document.createElement("option");
                			oInner2  = document.createTextNode(nodes2[i].getAttribute("name"));
                			oOption2.value = nodes2[i].getAttribute("value");
                			oOption2.value = nodes2[i].getAttribute("id");
                			
                			oOption2.appendChild(oInner2);
                			oSelect2.appendChild(oOption2);
                		}
                	}
                


                <?php 
                	session_start();
                	include('fonctions.php');
                ?>
                
                <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
                <html xmlns="http://www.w3.org/1999/xhtml">
                <head>
                <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                <script type="text/javascript" src="oXHR.js"></script>
                <script type="text/javascript" src="form.js"></script>
                </head>
                <body>
                <?php
                	$tabSociete = nomSociete();
                ?>
                <fieldset>
                	<legend>La Soci&eacute;t&eacute;</legend>
                	<form method="post" action="verif.php" enctype="multipart/form-data"> 
                		
                		<?php
                			if(sizeof($tabSociete) > 0)
                			{
                				echo'<select name="societes" onchange="request(this);">';
                				echo '<option value="none">Choisir une soci&eacute;t&eacute;</option>';
                				
                				for($i=0; $i<sizeof($tabSociete); $i++)
                				{
                					$id = idSociete($tabSociete[$i]);
                					echo'<option value='.$id.'>'.strtoupper($tabSociete[$i]).'</option>';
                				}
                				echo '</select>';
                			}
                			else
                			{
                				echo '<input type="text" name="societes" value="Saisir le nom de la société"/>';
                			}
                		?>
                		<p><select id="client" name="client"></select></p>
                		<p><select id="equipement" name="equipement"></select></p>
                	<input type="submit" value="Envoyer"/>
                	</form>
                </fieldset>
                </body>
                </html>
                


                Voila donc ce sur quoi je me suis basé pour réaliser mon formulaire,mais je ne vois pas pourquoi l'un marche et l'autre pas :(


                EDIT : en insérant un alert(xhr.responseXML), j'ai pu voir que celui ci était null, c'est donc là la source de mon problème. Maintenant pourquoi est-il null ? o_O
                • Partager sur Facebook
                • Partager sur Twitter
                  22 août 2011 à 14:56:40

                  tu peu poster client.php stp
                  • Partager sur Facebook
                  • Partager sur Twitter
                    22 août 2011 à 15:00:37

                    <?php 
                    	include('fonctions.php');
                    
                    
                    header("Content-Type: text/xml");
                    echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
                    echo "<list>";
                    
                    $idSociete = (isset($_POST["IdSociete"])) ? htmlentities($_POST["IdSociete"]) : NULL;
                    
                    if ($idSociete)
                    {
                    	$tabInterlocuteur = nomClient($idSociete);
                    	
                    	for($i=0; $i<sizeof($tabInterlocuteur); $i++)
                    	{
                    		$idClient = idClient($_SESSION['idSociete'], $tabInterlocuteur[$i]);
                    		echo "<item1 value=\"".$idClient."\" id=\"".$idClient."\" name=\"".strtoupper($tabInterlocuteur[$i])."\" />";
                    	}
                    	
                    	$tab = selectEqui2($idSociete);
                    
                    	for($i=0; $i<sizeof($tab); $i++)
                    	{
                    		$tableau = explode('/', $tab[$i]);
                    		$nom = ucfirst($tableau[0]);
                    		$id = $tableau[2];
                    
                    		echo "<item2 value=\"".$idClient."\" id=\"".$id."\" name=\"".$nom."\" />";
                    	}
                    }
                    
                    echo "</list>";
                    
                    ?>
                    
                    • Partager sur Facebook
                    • Partager sur Twitter
                      22 août 2011 à 15:44:38

                      je vois pas d'explications, je peu pas t'aider, attend que ceux qui s'y connaisse vraiment arrive ^^
                      • Partager sur Facebook
                      • Partager sur Twitter
                        22 août 2011 à 15:47:12

                        OK bah en tout cas merci beaucoup d'avoir essayé, c'est certainement une erreur toute bête à tous les coups !
                        • Partager sur Facebook
                        • Partager sur Twitter
                          24 août 2011 à 10:18:53

                          Salut, tes erreurs me paresse logique, je n'ai vu aucun élément d'id "loader" dans ton code. Et si il te dit que oData est null, c'est certainement xhr.responseXML te renvoi null, utilise firebug et met un point d'arret au niveau de cette ligne pour vérifier ce que contient xhr.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            24 août 2011 à 10:22:10

                            d'accord, je télécharge firebug et j'essaie :)

                            Mais pourquoi dans mon autre script cela marche sans pb alors ? Car il n'y a pas d'id loader non plus
                            • Partager sur Facebook
                            • Partager sur Twitter
                              24 août 2011 à 10:51:33

                              En fait , il y a des choses qui ne sont pas très clair, je n'arrive pas à comprendre qu'est ce qui va avec quoi, dans le code qui fonctionne, le javascript est dans un fichier a part?
                              J'ai remarqué qu'il y avait oXHR.js, c'est lui qui est censé construire l’élément d'id "loader", a mon avis c'est pas cette parti là la plus grave, car au pire tu créé un div d'id "loader".
                              Le principal problème dans ton cas c'est comprendre ce qui est renvoyé par l'ajax, et gérer le parsing.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                24 août 2011 à 11:26:04

                                En fait j'importe dans ma page le oXHR.js puis les deux fonctions request & readData dans la page de mon formulaire. C'est clair que c'est le xhr.responseXML qui n'est pas bon mais je n'arrive pas à comprendre pourquoi dans un cas il est null alors que dans l'autre cas tout fonctionne bien :S

                                dans mon oXHR.js j'ai:

                                function getXMLHttpRequest()
                                {
                                	var xhr = null;
                                	
                                	if (window.XMLHttpRequest || window.ActiveXObject) {
                                		if (window.ActiveXObject) {
                                			try {
                                				xhr = new ActiveXObject("Msxml2.XMLHTTP");
                                			} catch(e) {
                                				xhr = new ActiveXObject("Microsoft.XMLHTTP");
                                			}
                                		} else {
                                			xhr = new XMLHttpRequest(); 
                                		}
                                	} else {
                                		alert("Votre navigateur ne supporte pas l'objet XMLHTTPRequest...");
                                		return null;
                                	}
                                	
                                	return xhr;
                                }
                                


                                Je n'ai pas d'id "loader" ou alors il se situe dans le XMLHttpRequest() ou le ActiveXObject
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Anonyme
                                  24 août 2011 à 13:24:34

                                  A tout hasard : En Ajax, tu dois finaliser la requête HTTP en faisant un xhr.send(null) après avoir envoyé tes paramètres.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    24 août 2011 à 13:40:00

                                    bah j'envoie déjà un paramètre (id_societe) donc pas la peine de le mettre si ?
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      24 août 2011 à 16:59:13

                                      non pas la peine, tu fais xhr.send(null) quand tu envoie via GET mais vu que tu fais POST, il faut faire ce que tu fais donc ton problème ne viens pas de là.
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        25 août 2011 à 9:28:52

                                        bah oui mais il vient d'où ? ^^
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          25 août 2011 à 10:14:13

                                          si tu fais un alert de oData dans la fonction readData, sa affiche quoi?

                                          Dans client.php fais simplement un echo de n'importe quoi et regarde se qui reviens au script js.
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            25 août 2011 à 10:25:01

                                            oData dans le readData est null étant donné que le xhr.responseXML est null.

                                            Pour le interlocuteur.php, il n'y accède jamais du coup..

                                            Dans le cas de mon script qui marche, oData vaut [object XMLDocument].

                                            Pour le client.php qui lui est relié, c'est un fichier de création du XML donc il n'est pas lu à proprement parler vu qu'il sert à créer les données. Un echo ne change donc rien.
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              25 août 2011 à 10:34:26

                                              Ton script ajax envoie bien id_societe à client.php?

                                              Donc si tu fas simplement un echo "test"; dans client.php xhr.responseTEXT (il faut modifier) affichera "test".
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                25 août 2011 à 10:44:57

                                                non c'est l'autre ^^
                                                Je te les remet là :
                                                Celui qui marche :
                                                <?php 
                                                	include('fonctions.php');
                                                ?>
                                                
                                                <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
                                                <html xmlns="http://www.w3.org/1999/xhtml">
                                                <head>
                                                <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                                                <script type="text/javascript" src="oXHR.js"></script>
                                                <script type="text/javascript" src="form.js"></script>
                                                </head>
                                                <body>
                                                <?php
                                                	$tabSociete = nomSociete();
                                                ?>
                                                <fieldset>
                                                	<legend>La Soci&eacute;t&eacute;</legend>
                                                	<form method="post" action="verif.php" enctype="multipart/form-data"> 
                                                		
                                                		<?php
                                                			if(sizeof($tabSociete) > 0)
                                                			{
                                                				echo'<select name="societes" onchange="request(this);">';
                                                				echo '<option value="none">Choisir une soci&eacute;t&eacute;</option>';
                                                				
                                                				for($i=0; $i<sizeof($tabSociete); $i++)
                                                				{
                                                					$id = idSociete($tabSociete[$i]);
                                                					echo'<option value='.$id.'>'.strtoupper($tabSociete[$i]).'</option>';
                                                				}
                                                				echo '</select>';
                                                			}
                                                			else
                                                			{
                                                				echo '<input type="text" name="societes" value="Saisir le nom de la société"/>';
                                                			}
                                                		?>
                                                		<p><select id="client" name="client"></select></p>
                                                		<p><select id="equipement" name="equipement"></select></p>
                                                	<input type="submit" value="Envoyer"/>
                                                	</form>
                                                </fieldset>
                                                </body>
                                                </html>
                                                

                                                Avec le form.js qui envoie au client.php:

                                                function request(oSelect)
                                                {
                                                	var value = oSelect.options[oSelect.selectedIndex].value;
                                                	var xhr = getXMLHttpRequest();
                                                	
                                                	xhr.onreadystatechange = function() {
                                                		if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) 
                                                		{
                                                			readData(xhr.responseXML);
                                                			document.getElementById("loader").style.display = "none";
                                                		}
                                                		else if (xhr.readyState < 4)
                                                		{
                                                			document.getElementById("loader").style.display = "inline";
                                                		}
                                                	};
                                                	
                                                	xhr.open("POST", "client.php", true);
                                                	xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
                                                	xhr.send("IdSociete=" + value);	
                                                }
                                                
                                                function readData(oData)
                                                {
                                                	var nodes = oData.getElementsByTagName("item1");
                                                	var oSelect = document.getElementById("client");
                                                	var oOption, oInner;
                                                	
                                                	oSelect.innerHTML = "";
                                                	for (var i=0, c=nodes.length; i<c; i++)
                                                	{
                                                		oOption = document.createElement("option");
                                                		oInner  = document.createTextNode(nodes[i].getAttribute("name"));
                                                		oOption.value = nodes[i].getAttribute("value");
                                                		oOption.value = nodes[i].getAttribute("id");
                                                		
                                                		oOption.appendChild(oInner);
                                                		oSelect.appendChild(oOption);
                                                	}
                                                	
                                                	var nodes2   = oData.getElementsByTagName("item2");
                                                	var oSelect2 = document.getElementById("equipement");
                                                	var oOption2, oInner2;
                                                	
                                                	oSelect2.innerHTML = "";
                                                	for (var i=0, c=nodes2.length; i<c; i++)
                                                	{
                                                		oOption2 = document.createElement("option");
                                                		oInner2  = document.createTextNode(nodes2[i].getAttribute("name"));
                                                		oOption2.value = nodes2[i].getAttribute("value");
                                                		oOption2.value = nodes2[i].getAttribute("id");
                                                		
                                                		oOption2.appendChild(oInner2);
                                                		oSelect2.appendChild(oOption2);
                                                	}
                                                }
                                                


                                                Le client.php:

                                                <?php 
                                                	include('fonctions.php');
                                                
                                                
                                                header("Content-Type: text/xml");
                                                echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
                                                echo "<list>";
                                                
                                                $idSociete = (isset($_POST["IdSociete"])) ? htmlentities($_POST["IdSociete"]) : NULL;
                                                echo $idSociete;
                                                if ($idSociete)
                                                {
                                                	$_SESSION['idSociete'] = $_POST["IdSociete"];
                                                	$tabInterlocuteur = nomClient($idSociete);
                                                	
                                                	for($i=0; $i<sizeof($tabInterlocuteur); $i++)
                                                	{
                                                		$idClient = idClient($_SESSION['idSociete'], $tabInterlocuteur[$i]);
                                                		echo "<item1 value=\"".$idClient."\" id=\"".$idClient."\" name=\"".strtoupper($tabInterlocuteur[$i])."\" />";
                                                	}
                                                	
                                                	$tab = selectEqui2($idSociete);
                                                
                                                	for($i=0; $i<sizeof($tab); $i++)
                                                	{
                                                		$tableau = explode('/', $tab[$i]);
                                                		$nom = ucfirst($tableau[0]);
                                                		$id = $tableau[2];
                                                
                                                		echo "<item2 value=\"".$idClient."\" id=\"".$id."\" name=\"".$nom."\" />";
                                                	}
                                                }
                                                
                                                echo "</list>";
                                                ?>
                                                


                                                Ces pages là marchent. C'est là dessus que je me suis basé.

                                                Maintenant le code que je génère actuellement et qui ne marche PAS ( :'( )

                                                <?php
                                                	include("requetes.php");
                                                	
                                                	$societe = NomSociete();
                                                	$auteur = NomAuteur();
                                                ?>
                                                
                                                <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
                                                <html xmlns="http://www.w3.org/1999/xhtml">
                                                	<head>
                                                	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
                                                	<link rel="stylesheet" media="screen" type="text/css" title="test" href="design.css" />
                                                	<script type="text/javascript" src="fonctions.js"></script>
                                                	</head>
                                                	<body>
                                                	<form method="post" action="" enctype="multipart/form-data">
                                                		<fieldset>
                                                			<table>
                                                				<tr><td>Société</td><td><select name="societe" onchange="request(this);">
                                                				<option value="none">Choisir une soci&eacute;t&eacute;</option>
                                                				<?php
                                                					foreach($societe as $i => $value)
                                                					{
                                                						echo '<option value="'.$societe[$i]['id_societe'].'">'.$societe[$i]['nom_societe'].'</option>';
                                                					}
                                                				?>
                                                				</select></td></tr>
                                                			</table>
                                                		</fieldset>
                                                		<center><input type="submit" value="Envoyer"/></center>
                                                	</form>
                                                	</body>
                                                </html>
                                                


                                                Associé à fonctions.js qui regroupe toutes les fonctions JS que j'utilise dans cette page:

                                                function getXMLHttpRequest()
                                                {
                                                	var xhr = null;
                                                	
                                                	if (window.XMLHttpRequest || window.ActiveXObject)
                                                	{
                                                		if (window.ActiveXObject)
                                                		{
                                                			try
                                                			{
                                                				xhr = new ActiveXObject("Msxml2.XMLHTTP");
                                                			}
                                                			catch(e)
                                                			{
                                                				xhr = new ActiveXObject("Microsoft.XMLHTTP");
                                                			}
                                                		}
                                                		else
                                                		{
                                                			xhr = new XMLHttpRequest(); 
                                                		}
                                                	}
                                                	else
                                                	{
                                                		alert("Votre navigateur ne supporte pas l'objet XMLHTTPRequest...");
                                                		return null;
                                                	}
                                                	return xhr;
                                                }
                                                
                                                function request(oSelect)
                                                {
                                                	var value = oSelect.options[oSelect.selectedIndex].value;
                                                	var xhr = getXMLHttpRequest();
                                                	
                                                	xhr.onreadystatechange = function() {
                                                		if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0))
                                                		{
                                                			readData(xhr.responseXML);
                                                			document.getElementById("loader").style.display = "none";
                                                		}
                                                		else if (xhr.readyState < 4)
                                                		{
                                                			document.getElementById("loader").style.display = "inline";
                                                		}
                                                	};
                                                	
                                                	xhr.open("POST", "interlocuteur.php", true);
                                                	xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
                                                	xhr.send("id_societe=" + value);
                                                }
                                                
                                                function readData(oData)
                                                {
                                                	var nodes = oData.getElementsByTagName("item");
                                                	var oSelect = document.getElementById("interlocuteur");
                                                	var oOption, oInner;
                                                	
                                                	oSelect.innerHTML = "";
                                                	for (var i=0, c=nodes.length; i<c; i++)
                                                	{
                                                		oOption = document.createElement("option");
                                                		oInner  = document.createTextNode(nodes[i].getAttribute("name"));
                                                		oOption.value = nodes[i].getAttribute("value");
                                                		oOption.value = nodes[i].getAttribute("id");
                                                		
                                                		oOption.appendChild(oInner);
                                                		oSelect.appendChild(oOption);
                                                	}
                                                }
                                                


                                                Ce code là est donc relié à interlocuteur.php:

                                                <?php 
                                                	include('requetes.php');
                                                
                                                	header("Content-Type: text/xml");
                                                	echo "<?xml version='1.0' encoding='utf-8'?>";
                                                	echo "<list>";
                                                	
                                                	$id_societe = (isset($_POST["id_societe"])) ? htmlentities($_POST["id_societe"]) : NULL;
                                                	echo $id_societe;
                                                	if ($id_societe)
                                                	{
                                                		$tabInterlocuteur = nomClient($id_societe);
                                                		for($i=0; $i<sizeof($tabInterlocuteur); $i++)
                                                		{
                                                			echo "<item value='".$tabInterlocuteur[$i]['nom_client']."' id='".$tabInterlocuteur[$i]['id_client']."' name='".strtoupper([$i]['id_client'])."' />";
                                                		}
                                                	}
                                                
                                                	echo "</list>";
                                                ?>
                                                


                                                Voila les 2 scripts.

                                                Je fais donc juste un echo 'test'; dans la page client.php (qui je rappel est la page qui marche). J'ai fait ton alert(xhr.responseTEXT); et ça me met 'undefined' :S

                                                j'en profite pour te remercier encore une fois de passer autant de temps avec mes pbs c'est cool :)
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  25 août 2011 à 10:52:14

                                                  tkt pas de problème ^^

                                                  il y a quoi dans requetes.php? Utilise plutôt require_once au lieu de include comme sa on est sûr que c'est pas là le problème.

                                                  et si tu fait un echo "test"; dans interlocuteur.php?
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    25 août 2011 à 11:03:34

                                                    il y a mes requetes SQL qui permettent de récupérer toutes les sociétés etc. Oui c'est vrai c'est surement mieux je ne sais pas pourquoi j'ai mis un include moi.. :-°

                                                    Ca me met undefined aussi
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      25 août 2011 à 11:44:09

                                                      ok j'ai un peu mieux compris le fonctionnement:


                                                      <?php
                                                      
                                                      		function request(oSelect)
                                                      		{
                                                      			var value = oSelect.options[oSelect.selectedIndex].value;
                                                      			var xhr = getXMLHttpRequest();
                                                      			
                                                      			xhr.onreadystatechange = function() {
                                                                                    //3
                                                      				if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
                                                      					readData(xhr.responseXML);
                                                      					document.getElementById("loader").style.display = "none";
                                                      				} else if (xhr.readyState < 4) {
                                                      					document.getElementById("loader").style.display = "inline";
                                                      				}
                                                      			};
                                                      			//1
                                                      			xhr.open("POST", "interlocuteur.php", true);
                                                      			xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
                                                      			xhr.send("id_societe=" + value);
                                                                              //2 //5
                                                      		}
                                                      
                                                      		function readData(oData)
                                                      		{
                                                                              //4
                                                      			var nodes = oData.getElementsByTagName("item");
                                                      			var oSelect = document.getElementById("interlocuteur");
                                                      			var oOption,oInner;
                                                      			
                                                      			oSelect.innerHTML = "";
                                                      			for (var i=0, c=nodes.length; i<c; i++)
                                                      			{
                                                      				oOption = document.createElement("option");
                                                      				oInner  = document.createTextNode(nodes[i].getAttribute("name"));
                                                      				oOption.value = nodes[i].getAttribute("value");
                                                      				oOption.value = nodes[i].getAttribute("id");
                                                      				
                                                      				oOption.appendChild(oInner);
                                                      				oSelect.appendChild(oOption);
                                                      			}
                                                      		}
                                                      
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        25 août 2011 à 11:46:18

                                                        et ça veut dire quoi les n° ? ^^
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          25 août 2011 à 13:27:19

                                                          Moi je voyais ça plutot comme ça :

                                                          function request(oSelect)
                                                          		{
                                                          			var value = oSelect.options[oSelect.selectedIndex].value;
                                                          			var xhr = getXMLHttpRequest();
                                                          			//1
                                                          			xhr.onreadystatechange = function() {
                                                          				if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
                                                                                          //2					
                                                                                                  readData(xhr.responseXML);
                                                          					document.getElementById("loader").style.display = "none";
                                                          				} else if (xhr.readyState < 4) {
                                                          					document.getElementById("loader").style.display = "inline";
                                                          				}
                                                          			};
                                                                                  //4
                                                          			xhr.open("POST", "interlocuteur.php", true);
                                                          			xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
                                                          			xhr.send("id_societe=" + value);
                                                          		}
                                                          
                                                          		function readData(oData)
                                                          		{
                                                                                 //3			
                                                                                  var nodes = oData.getElementsByTagName("item");
                                                          			var oSelect = document.getElementById("interlocuteur");
                                                          			var oOption,oInner;
                                                          			
                                                          			oSelect.innerHTML = "";
                                                          			for (var i=0, c=nodes.length; i<c; i++)
                                                          			{
                                                          				oOption = document.createElement("option");
                                                          				oInner  = document.createTextNode(nodes[i].getAttribute("name"));
                                                          				oOption.value = nodes[i].getAttribute("value");
                                                          				oOption.value = nodes[i].getAttribute("id");
                                                          				
                                                          				oOption.appendChild(oInner);
                                                          				oSelect.appendChild(oOption);
                                                          			}
                                                          		}
                                                          
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter

                                                          Ajax

                                                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                          • Editeur
                                                          • Markdown