11548 sujets

JavaScript, DOM et API Web HTML5

J'ai le code javascript suivant :

function executer(form) {
				var xhr_object = null;
				var texteRequete = document.getElementById('requete').value;
				if (window.XMLHttpRequest) { // Mozilla, Safari,...
					xhr_object = new XMLHttpRequest();
					if (xhr_object.overrideMimeType) {
						xhr_object.overrideMimeType('text/xml');
					}
				} else if (window.ActiveXObject) { // IE
						try {
							xhr_object = new ActiveXObject("Msxml2.XMLHTTP");
						} catch (e) {
							try {
								xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
							} catch (e) {}
						}
				}
				
				xhr_object.open("POST", "executionRequete.php", true);
				xhr_object.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				xhr_object.onreadystatechange = function anonymous() {
					if(xhr_object.readyState == 4) {
						var xmldoc = xhr_object.responseXML;
						document.getElementById('reponse').innerHTML = "";
						var conteneur = xmldoc.getElementById('contenu');
						document.getElementById('reponse').appendChild (conteneur);
						
						document.getElementById('reponse').style.display = 'block';
					}
				};
				xhr_object.send("requete="+texteRequete);
			}


Qui fait donc appel au fichier php suivant :

<?php
$sql_serveur="localhost";
$sql_user="***";
$sql_passwd="***";
$sql_bdd="cheerup";
$db_link = mysql_connect($sql_serveur,$sql_user,$sql_passwd);
$db_selected = mysql_select_db($sql_bdd,$db_link);
if (!$db_selected) {
	die ('Impossible d\'utiliser la base : ' . mysql_error());
}

$sql_bdd="cheerup";
$requete = ((isset($_GET['requete']))?$_GET['requete'] [decu](isset($_POST['requete']))?$_POST['requete']:null));

header("Content-type: text/xml"); 
echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>\n");
echo("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n");
echo("<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"fr\">\n");
echo("<head>\n");
echo("<title>R&eacute;ponse &agrave; la requ&egrave;te SQL</title>\n");
echo("<meta http-equiv=\"Content-Type\" content=\"application/xhtml+xml; charset=iso-8859-1\"/>\n");
echo("<meta name=\"Cache-Control\" content=\"no-cache, must-revalidate\"/>\n</head>\n");
if ($requete == null) {
	echo("<body><div id=\"contenu\"><p>Demande invalide</p></div></body>\n</html>");
	exit();
}
$reponse = mysql_query($requete);

if ($reponse !=false) {
	echo("<body>");
	echo("<p>Voici le r&eacute;sultat de votre requ&egrave;te :</p>");
	echo("<div id=\"contenu\"><table border=\"1\"><tbody>");
	while ($row = mysql_fetch_row($reponse)) {
		echo("<tr>");
		foreach ($row as $item) {
			echo ("<td>".($item?htmlentities($item):"&nbsp;")."</td>");
		}
		echo("</tr>");
	}
	echo("</tbody></table></div>");
	echo("</body>");
}
else {
	echo("<body><div id=\"contenu\"><p>".mysql_error()."</p></div></body>");
}

echo ("</html>");
?>


(C'est normal que le fichier php contienne toutes les en-tetes html et autres c juste qu'il peut aussi marcher en autonome)

Sous Firefox aucun probleme, mon code recupere ce que je veux dans le fichier xhtml généré et me laffiche dans le div "reponse" de mon document.
Sous Internet Explorer ca bloque. la fonction responseXML ne provoque pas d'erreur mais il me charge un document entierement vide ce qui fait que la ligne :
var conteneur = xmldoc.getElementById('contenu');

provoque un arret d'execution du script...


QQn pourrait-il m'aider? ca fait des heures que je bloque sur ce probleme...

Eric
Qu'obtiens-tu comme réponse sur IE ? Vérifie avec responseText.
Est-ce que tu appelles souvent le même fichier ? Il peut s'agir d'un problème de cache.
C'est pas un probleme de cache ca je peux l'assurer.
J'ai decouvert que le responseXML foirrait sous IE et qu'une methode etait celle la :

if (window.XMLHttpRequest){
	xmlDocument = xhr_object.responseXML;
}
else if (window.ActiveXObject){
	xmlDocument = new ActiveXObject("Microsoft.XMLDOM");
	textXML = xhr_object.responseText;
	xmlDocument.load(textXML);
}


En fait ca ne marche pas non plus mais j'ai trouvé pourquoi.
IE ne supporte pas de devoir charger l'entete XML ni les caracteres web (&eacute; ...)...
Voila je connais le probleme mais j'ai pas la solution... Donc si qqn pouvait m'aider un peu...
J'ai eu un probleme similaire :
IE bloquait sur
xhr_object.onreadystatechange

et curieusement pas sur tous les serveurs...
En local sur ma machine sa marchait impeccable mais en ligne ca bloquait

J'avais mis cette ligne dans l'entete de mon fichier html :
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

depuis que je l'ai retiré ca marche

J'ai pas compris, enfin si ca peut aider...
Modifié par alis (07 Sep 2006 - 10:00)