[AJAX] [XMLHttpRequest] [Encoding]

Résolu/Fermé
Acasanva - 10 déc. 2009 à 15:01
Acasanva Messages postés 9 Date d'inscription jeudi 10 décembre 2009 Statut Membre Dernière intervention 9 septembre 2011 - 11 déc. 2009 à 12:32
Bonjour à toutes et à tous,

Je rencontre un petit souci d'encoding avec l'objet XMLHttpRequest, et ce même sans utiliser PHP.

J'ai spécifié toutes mes pages selon l'encoding utf-8.


J'ai une page index.html qui contient plusieurs div dont une qui sert a contenir un contenu. je veux changer le contenu de cette div au clique sur un bouton.

Voici le code le index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
    <title>Page de test</title>
  
    <link rel="stylesheet" type="text/css" href="style_div.css">
  
    <script src='./scripts/alimenter.js' language='javascript'></script>
 
  </head>
  <body>
    <div id="bandeau">Ceci est le bandeau</div>
    <div id="fond">
      <div id="menu">
          Ceci est le menu <br/>
          <img src='./img/change_state.gif' onclick='alimenterContenu(1)'>
        </div>
      <div id="contenu">
        Ceci est le contenu
      </div>
    </div>
    <div id="piedpage">Ceci est le pied de page</div>
  </body>
</html>


afficher.js =
// JavaScript Document

function alimenterContenu(i){
  
  var xhr_object = null; 
  
  if(window.XMLHttpRequest) // Firefox 
	   xhr_object = new XMLHttpRequest(); 
	else if(window.ActiveXObject) // Internet Explorer 
	   xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); 
	else { // XMLHttpRequest non supporté par le navigateur 
	   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
	   return; 
	}
	
  xhr_object.open("GET", "text1.html", true);  
  xhr_object.send(null); 
  
  xhr_object.onreadystatechange = function() { 
     if(xhr_object.readyState == 4) {
       
       //alert(xhr_object.responseText);
       
       setContentDiv("contenu", xhr_object.responseText + "<br />");
     }

	}
}

function clearDiv(id) {
  document.getElementById(id).innerHTML = "";
} 

function setContentDiv(id, txt) {
  clearDiv(id);
  document.getElementById(id).innerHTML += txt+"<br />"; 
}


Je charge donc la div id="contenu" par texte.html que voici:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <title>Page de test</title>
    <link rel="stylesheet" type="text/css" href="style_div.css"> 
  </head>
  <body>
    Ceci est une page externe avec du contenu <b>formaté</b>.
  </body>
</html>


Bilan des courses: le é ne ressort pas. (j'ai le gros losange noir avec ? blanc au milieu). J'ai beau chercher partout sur le net, il est écrit qu'il faut être sur le même encoding de bout en bout (ce qui est le cas) et que XMLHttpRequest encode en utf-8 (ce que j'ai choisi).

Je vois donc pas ce que je fais de faux...

Merci de votre œil avisé.

3 réponses

Acasanva Messages postés 9 Date d'inscription jeudi 10 décembre 2009 Statut Membre Dernière intervention 9 septembre 2011 2
11 déc. 2009 à 12:32
[RESOLU]

C'est toujours par les petits détails qu'on se fait em***er .

Le fichier texte.html etait enregistré en ASCII ce qui biensur foutait tout par terre.

je l'ai enregistré en UTF-8 et placer le charset en UTF-8 dans texte.html et index.html.

Et ca marche ! :-)
1
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
10 déc. 2009 à 16:36
Bonjour,

Après avoir récupéré la réponse à ton appel AJAX, essaie de faire
alert(xhr_object.getResponseHeader());

On pourra au moins voir quel est l'encodage que le serveur renvoie.

Xavier
0
Acasanva Messages postés 9 Date d'inscription jeudi 10 décembre 2009 Statut Membre Dernière intervention 9 septembre 2011 2
10 déc. 2009 à 16:48
Merci de ta suggestion (je début en AJAX et je patauge un peu...)

getResponseHeader pour "content-type" et "content" retourne une chaine vide.

alert(xhr_object.getAllResponseHeaders()); retourne null.

:(

je la sens pas cette histoire...
0