Les Allergies
Alimentaires
Posez votre question Signaler

[AJAX] [XMLHttpRequest] [Encoding] [Résolu]

Acasanva - Dernière réponse le 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é.
Lire la suite 

[AJAX] [XMLHttpRequest] [Encoding] »

3 réponses
Réponse
+1
moins plus
[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 ! :-)
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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...
Ajouter un commentaire
Ce document intitulé « [AJAX] [XMLHttpRequest] [Encoding] » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?