Pb utilisation Ajax dans sa version xml

Nounet
Invité n'ayant pas de compte PHPfrance

06 avr. 2008, 11:00

Bonjour a tous,

J'utilise depuis peu les XmlHttpRequest pour mes applications web mais dans leur fonction simple.En effet,je ne genere pas du xml ce qui va exaspéré les puristes .c'est pourquoi dans un souci de bien faire ,je souhaiterais affiné mon code pour effectivement généré du xml.

Mon code doit afficher un formulaire avec des champ input ....
et c'est la le probleme ,je ne vois pourtant aucun message d'erreur pouvant m'aiguiller ,c'est pourquoi j'en fais appel à vos competences .

Voici le contenu de mon fichier Ajax.php
<?php

if (isset($_POST['IdCommande'])===TRUE){
	echo '<?xml version="1.0"?>\n';
	echo '<sInformationDossier>\n';


	//on se connecte a la base de données access
	$oConnection=new PDO(CONNECTION_TO_ACCESS);
	if ($oConnection instanceof PDO){
	//Attention IdCommande nous sera renvoyé par Ajax en methode post
	$oPDOStatement=$oConnection->query('SELECT prenomProprietaire,idCommande,titreProprietaire,nomProprietaire,immeubleProprietaire,adresseProprietaire,codePostalProprietaire,villeProprietaire,adresseBien,CodePostalBien,immeubleBien,villeBien FROM commande WHERE idCommande='.$_POST['IdCommande']);
				while($aRow=$oPDOStatement->fetch()){
					echo '<sTitreProprietaire>'.trim($aRow['titreProprietaire']).'</sTitreProprietaire>\n';
					echo '<sNomProprietaire>'.trim($aRow['nomProprietaire']).'</sNomProprietaire>\n';
					echo '<sImmeubleProprietaire>'.trim($aRow['immeubleProprietaire']).'</sImmeubleProprietaire>\n';
					echo '<sAdresseProprietaire>'.trim($aRow['adresseProprietaire']).'</sAdresseProprietaire>\n';
					echo '<iCodePostalProprietaire>'.$aRow['codePostalProprietaire'].'</iCodePostalProprietaire>\n';
					echo '<sVilleProprietaire>'.trim($aRow['villeProprietaire']).'</sVilleProprietaire>\n';
					echo '<sPrenomProprietaire>'.trim($aRow['prenomProprietaire']).'</sPrenomProprietaire>\n';
					echo '<iCodePostalBien>'.$aRow['CodePostalBien'].'</iCodePostalBien>\n';
					echo '<sAdresseBien>'.$aRow['adresseBien'].'</sAdresseBien>\n';
					echo '<sImmeubleBien>'.$aRow['immeubleBien'].'</sImmeubleBien>\n';
					echo '<sVilleBien>'.$aRow['villeBien'].'</sVilleBien>\n';
				}
	}else{
		throw new Exception('Connection sql impossible');
	}
	echo '</sInformationDossier>\n';
	header('Content-Type: text/xml'); 
	//on ferme la connexion avec la base de données
	$oConnection=NULL;
}
?>
et voici maintenant mon fichier Ajax.js
function getXhr(){
		var xhr = null; 
		if(window.XMLHttpRequest) // Firefox et autres
		   xhr = new XMLHttpRequest(); 
		else if(window.ActiveXObject){ // Internet Explorer 
		   try {
					xhr = new ActiveXObject("Msxml2.XMLHTTP");
				} catch (e) {
					xhr = new ActiveXObject("Microsoft.XMLHTTP");
				}
		}
		else { // XMLHttpRequest non supporté par le navigateur 
		   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
		   xhr = false; 
		} 
						return xhr
	}
	// fonction de nettoyage de notre feuille xml
			function Preclean(c){
				if(!c.data.replace(/\s/g,''))
					c.parentNode.removeChild(c);
			}

			function clean(d){
				var bal=d.getElementsByTagName('*');

				for(i=0;i<bal.length;i++){
					a=bal[i].previousSibling;
					if(a && a.nodeType==3)
						Preclean(a);
					b=bal[i].nextSibling;
					if(b && b.nodeType==3)
						Preclean(b);
				}
				return d;
			} 
	/**
	* Méthode qui sera appelée sur le click du bouton
	*/
	function go(){
	
		var xhr = 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){
				reponse = clean(xhr.responseXML.documentElement);

		AfficheFormulaire(reponse);
			}
		}
		// Ici on va voir comment faire du post
		xhr.open("POST","Ajax.php",true);
		// ne pas oublier ça pour le post
		xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		// ici, l\'id de l\'auteur
		HandleDuSelectBox= document.getElementById("IdCommande");
		javaIdCommande = HandleDuSelectBox.options[HandleDuSelectBox.selectedIndex].value;
		//on definit ce que doit envoyer notre script java il renverra $_POST [\'IdCommande\']
		xhr.send("IdCommande="+javaIdCommande);
		xhr.send(null);
		
	}
	
	/**Méthode d'affichage du formulaire**/
	
    function AfficheFormulaire(xhr)
	{
		var docXML= xhr.responseXML;
		//on recupere tous les elements de notre fichier xml
		//par la suite on piourra optimiser ces lignes en utilisant un tableau
		var sTitreProprietaire = docXML.getElementsByTagName("sTitreProprietaire");
		var sNomProprietaire = docXML.getElementsByTagName("sNomProprietaire");
		var sImmeubleProprietaire = docXML.getElementsByTagName("sImmeubleProprietaire");
		var sAdresseProprietaire = docXML.getElementsByTagName("sAdresseProprietaire");
		var iCodePostalProprietaire = docXML.getElementsByTagName("iCodePostalProprietaire");
		var sVilleProprietaire = docXML.getElementsByTagName("sVilleProprietaire");
		var sPrenomProprietaire = docXML.getElementsByTagName("sPrenomProprietaire");
		var iCodePostalBien = docXML.getElementsByTagName("iCodePostalBien");
		var sAdresseBien = docXML.getElementsByTagName("sAdresseBien");
		var sImmeubleBien = docXML.getElementsByTagName("sImmeubleBien");
		var sVilleBien = docXML.getElementsByTagName("sVilleBien");
		
		//on crée une variable qui va nous crée le formulaire
		var html= ''; 
		html +='<input type="hidden" id="ImmeubleProprietaire" name="ImmeubleProprietaire" value="' +sImmeubleProprietaire+ '" />';
		html +='<input type="hidden" id="AdresseProprietaire" name="AdresseProprietaire" value="' +sAdresseProprietaire+ '" />;
		html +='<input type="hidden" id="CodePostalProprietaire" name="CodePostalProprietaire" value="' +iCodePostalProprietaire+ '"/>;
		html +='<input type="hidden" id="VilleProprietaire" name="VilleProprietaire" value="'+ sVilleProprietaire +'"/>;
		html +='<dl><dt><label for="TitreProprietaire" >Titre proprietaire :</label></dt><dd><input type="text" id="TitreProprietaire" name="TitreProprietaire" value="'+ sTitreProprietaire +'" /></dd></dl>';
		html +='<dl><dt><label for="NomProprietaire" >Nom du propriétaire :</label></dt><dd><input type="text" id="NomProprietaire" name="NomProprietaire" value="'+ sNomProprietaire +'" /></dd></dl>';
		html +='<dl><dt><label for="PrenomProprietaire" >Prènom du propriétaire :</label></dt><dd><input type="text" id="PrenomProprietaire" name="PrenomProprietaire" value="'+ sPrenomProprietaire +'" /></dd></dl>';
		html +='<dl><dt><label for="ImmeubleBien" >Immeuble du bien:</label></dt><dd><input type="text" id="ImmeubleBien" name="ImmeubleBien" value="'+ sImmeubleBien +'" /></dd></dl>';
		html +='<dl><dt><label for="AdresseBien" >Adresse du bien:</label></dt><dd><input type="text" id="AdresseBien" name="AdresseBien" value="'+ sAdresseBien +'" /></dd></dl>';
		html +='<dl><dt><label for="CodePostal" >Code postal du bien :</label></dt><dd><input type="text" id="CodePostalBien" name="CodePostalBien" value="'+ iCodePostalBien +'" /></dd></dl>';
		html +='<dl><dt><label for="VilleBienAnalysimmo" >Ville du bien dans Analysimmo</label></dt><dd><input type="text" id="VilleBienAnalysimmo" name="VilleBienAnalysimmo" value="'+ sVilleBien +'" /></dd></dl>';
		//je precise a quel endroit dans notre page ernt.php je souhaite affiche mon formulaire,nous avons crée un div du nom de AfficheFormulaireAjax au sein de notre page php
		document.getElementById('AfficheFormulaireAjax').innerHTML += html;
								
								
								
								
							}
							
quelqu'un y voit il une erreur de ma part.en effet pour la creation du formulaire en java script ,j'ai fait appel a mon ami google.Merci d'avance pour vos lumieres!!

Mammouth du PHP | 1885 Messages

06 avr. 2008, 21:02

Il manque des "single-quotes" à plusieurs endroits dont ici:
html +='<input type="hidden" id="ImmeubleProprietaire" name="ImmeubleProprietaire" value="' +sImmeubleProprietaire+ '" />';
        html +='<input type="hidden" id="AdresseProprietaire" name="AdresseProprietaire" value="' +sAdresseProprietaire+ '" />; <---- ICI
De plus, getElementsByTagName(elm) retourne un tableau des éléments ayant pour nom "elm". Tu dois donc récupérer le premier élément avec [0], ce qui n'est pas fait dans ton code. Vérifie à ce niveau.

Tu peux également t'amuser à lire mon article sur le sujet: (avec YUI)
http://www.generationphp.net/2007/12/30 ... hp-et-yui/
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

Nounet
Invité n'ayant pas de compte PHPfrance

21 avr. 2008, 11:40

Merci a toi pour ton debut de reponse,
j'ai bien corrigé mes erreurs de ' qui maquait et aussi ajouter afin d'indiquer l'indice du tableau pourtant le probleme persiste et j'aimerais bien resoudre ce probleme sans passer par un e librairie externe.
Cordialement.