XMLHTTP : réponse serveur
Cela fait deux jours que je bloque sur mon code et pourtant je ne vois rien qui cloche...
Le problème qui me surprend le plus, c'est que sous Firefox, le serveur ne répond jamais à ma requête (readyState ne passe jamais à 3) alors que sous IE la réponse passe sans problèmes... Alors que sous IE, je n'arrive pas à accéder au contenu de mes div :roll:
Ma version d'IE est la 7 et j'ai Firefox 2.0.0.6
Voici tout d'abord Mon code javascript :
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| function getElement(rid) {
return document.getElementById ? document.getElementById(rid) : document.all(rid) ;
}
function getXmlHTTP () {
var xmlhttp = false;
/* Compilation conditionnelle d'IE */
/*@cc_on
@if (@_jscript_version >= 5)
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP") ;
}
catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP") ;
}
catch (E) {
xmlhttp = false ;
}
}
@else
xmlhttp = false ;
@end @*/
if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
try {
xmlhttp = new XMLHttpRequest();
}
catch (e) {
xmlhttp = false;
}
}
return xmlhttp;
}
function remplis_div(doc,texte) {
elem2w = getElement('cadre_cible') ;
/*test = doc.createElement('a') ;
test.href = 'index.php' ;
test.textContent = texte ;
elem2w.appendChild(test) ;*/
alert(elem2w.textContent) ;
}
function gere_click_lien(id_element) {
xmlhttp = getXmlHTTP() ;
if (!xmlhttp) { return ; }
xmlhttp.open("GET", "operations.php?operation=lien&cible="+escape(id_element) ,true) ;
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
alert("Code html : "+xmlhttp.status) ;
remplis_div(document,xmlhttp.responseText) ;
}
}
xmlhttp.send(null);
} |
Et maintenant la page html (générée par php) sur laquelle s'applique le script :
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 29 30 31
| <!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" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<meta name="author" content="tsukaniki" />
<meta name="robots" content="none" />
<meta name="refresh" content="900" />
<meta http-equiv="Content-language" content="fr" />
<title>Base de donnée des DVDs</title>
<style type="text/css" title="default">
div.menu_elt {
display:inline;
padding:0 5px;
margin:0 5px;
border:0;
}
</style>
<script type="text/javascript" language="JavaScript1.5" src="scripts.js" charset="ISO-8859-1"></script>
</head>
<body>
<div id="grand_cadre">
<div id="menu">
<div class="menu_elt"><a href="index.php" id="lien_addfilm" onclick="gere_click_lien('lien_addfilm');">Ajout de film</a></div><div class="menu_elt"><a href="index.php" id="lien_rechrap" onclick="gere_click_lien('lien_rechrap');">Recherche rapide</a></div><div class="menu_elt"><a href="index.php" id="lien_rechav" onclick="gere_click_lien('lien_rechav');">Recherche avancée</a></div><div class="menu_elt"><a href="index.php" id="lien_geneliste" onclick="gere_click_lien('lien_geneliste');">Génération de liste</a></div><div class="menu_elt"><a href="index.php" id="lien_gestprets" onclick="gere_click_lien('lien_gestprets');">Gestion des prêts</a></div><div class="menu_elt"><a href="index.php" id="lien_autresope" onclick="gere_click_lien('lien_autresope');">Autres opérations</a></div> </div>
<div id="cadre_cible"> bla bla bla bla bla et bla</div>
<div id="infos"> </div>
</div>
</body>
</html> |
Pour ce qui est du contenu du fichier operations.php, le voici :
Code:
1 2 3 4
| <?php
header('Content-Type: text/html; charset=ISO-8859-1') ;
echo 'bla bla' ;
?> |
Il contenait beaucoup plus de code avant, mais je l'ai simplifié pour essayer de trouver l'erreur. Je n'ai pas de réponse avec Firefox que j'ai mis ou non header()...
Quelqu'un a-t-il une idée sur pourquoi je n'ai pas de réponse du serveur sous firefox et pourquoi sous IE textContent me retourne undefined ?
Merci d'avance ;)
PS : Petite précision, les tests sont fait en local sur ma machine avec EasyPhp (la dernière version en date).