Si vous avez un script Javascript qui, via AJAX, appelle un fichier qui retourne une simple chaîne de caractères, vous allez peut-être vous retrouver avec ce bogue sous Internet Explorer.
Exemple, un script PHP (fichier.php) qui retourne la chaine :
<?php
print "Une chaine!";
?>
Et, un script Javascript (utilisant jQuery) :
$.ajax({
url : 'fichier.php',
type : 'GET',
dataType : 'text',
success : function(data) {
alert(data);
}
})
Lors de l’exécution du script, une petite boîte contenant « Une chaine! » apparaitra, n’est-ce pas? Hé bien non, pas dans IE.
Même si on spécifie, lors de notre requête AJAX, que le contenu que l’on va recevoir est de type text, IE va tenter de le parser comme s’il s’agissait de code HTML. Le message d’erreur retourné par l’objet XMLHttpRequest est parsererror.
La solution? Servir le fichier appelé via AJAX en tant que text/plain pour forcer IE à le traiter comme un fichier texte et empêcher de le parser.
<?php
header("Content-type: text/plain; charset=UTF-8");
print "Une chaine!";
?>
Bonsoir Rémi, Je ne savais pas pour le Texte mais je me souviens m’être arraché les cheveux sur le même soucis avec IE et XML. De la même manière, l’ajout de header (« content-type: text/xml »); a résolu mon problème. En conclusion, un fichier Php destiné à une requête Ajax se doit d’inclure une vraie définition de Header.
P.S : 1er post, 1er compliment, j’adore l’originalité de la réalisation de ton blog. Ca change de l’omniprésent Wordpress.
Jay Salvat (28 février 2008 à 12:58 EST)
Ce qui est d’autant plus étrange avec ce bogue, c’est qu’on ne peut même pas blamer IE, qui lui reçoit un fichier déclaré comme du
text/html, il le parse donc comme un fichier HTML.Rémi Prévost (28 février 2008 à 15:37 EST)
C’est que j’appelerais un feature et non un bogue. Pour une fois que c’est IE qui respecte mieux le standard HTTP! :-)
Benoit Piette (4 mars 2008 à 17:43 EST)
Ce qui est bizarre dans ce cas-ci, c’est lorsqu’on demande à IE d’ouvrir un document HTML non-conforme, il obtempère, mais lorsque cela se passe par AJAX, il fait son capricieux ;-)
Rémi Prévost (5 mars 2008 à 10:25 EST)