IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AJAX Discussion :

[AJAX] Encodage de la réponse AJAX


Sujet :

AJAX

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 54
    Points : 56
    Points
    56
    Par défaut [AJAX] Encodage de la réponse AJAX
    Bonjour, Bonsoir,

    J'ai un petit problème d'encodage avec la réponse AJAX sous Firefox.
    J'appelle simplement une page html en GET qui est en iso-8859-1 et je voudrais pouvoir, par exemple, afficher toute la réponse dans un 'div' ou un 'textarea' mais quoi que je fasse je me retrouve toujours avec ce signe un peu partout : �
    Je ne vois pas du tout comment spécifier l'encodage de la réponse.

    Merci.
    Ci-dessous mon code javascript, on ne peut pas faire beaucoup plus simple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    function getXhr(){
      var xhr = null; 
      if(window.XMLHttpRequest) // Firefox et autres
        xhr = new XMLHttpRequest(); 
      else if(window.ActiveXObject){ // Internet Explorer 
        try {
          xhr = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
          xhr = new ActiveXObject("Microsoft.XMLHTTP");
        }
      }
      else { // XMLHttpRequest non supporté par le navigateur 
        alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
        xhr = false; 
      } 
      return xhr;
    }
     
    var xhr = getXhr();
    // On défini ce qu'on va faire quand on aura la réponse
    xhr.onreadystatechange = function(){
      // On ne fait quelque chose que si on a tout reçu et que le serveur est ok
      if(xhr.readyState == 4 && xhr.status == 200){
        alert(xhr.responseText);
      }
    }
    xhr.open("GET","http://.../page.html",true);
    xhr.send(null);

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 54
    Points : 56
    Points
    56
    Par défaut
    Hop, la solution... pas évidente à trouver mais facile à mettre en oeuvre.
    Un peu de doc sur XMLHttpRequest avec Firefox, si ça intéresse quelqu'un :
    - en Français : XMLHttpRequest
    - en Anglais : XMLHttpRequest
    UsingXMLHttpRequest

    Si on a un objet XMLHttpRequest on peut faire XMLHttpRequest .overrideMimeType("..."); pour modifier le Content-Type header de la réponse.
    Il faut exécuter cette fonction après le XMLHttpRequest.open(...);

    Avec mon code ci-dessus ça donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    function getXhr(){
      var xhr = null; 
      if(window.XMLHttpRequest) // Firefox et autres
        xhr = new XMLHttpRequest(); 
      else if(window.ActiveXObject){ // Internet Explorer 
        try {
          xhr = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
          xhr = new ActiveXObject("Microsoft.XMLHTTP");
        }
      }
      else { // XMLHttpRequest non supporté par le navigateur 
        alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
        xhr = false; 
      } 
      return xhr;
    }
     
    var xhr = getXhr();
    // On défini ce qu'on va faire quand on aura la réponse
    xhr.onreadystatechange = function(){
      // On ne fait quelque chose que si on a tout reçu et que le serveur est ok
      if(xhr.readyState == 4 && xhr.status == 200){
        alert(xhr.responseText);
      }
    }
    xhr.open("GET","http://.../page.html",true);
    xhr.overrideMimeType("text/html; charset=ISO-8859-1"); // On force le Content-Type pour dire au navigateur que la réponse est en ISO-8859-1
    xhr.send(null);
    Avec jQuery, pour ceux que ça intéresse, il faut le faire dans la fonction de callback 'beforeSend' : http://api.jquery.com/jQuery.ajax/
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $.ajax({
      type: "GET"
      , url: http://.../page.html
      , beforeSend: function(XMLHttpRequest, settings){
        if (XMLHttpRequest.overrideMimeType) {
          XMLHttpRequest.overrideMimeType("text/html; charset=ISO-8859-1");
        }
      }
      , success: function(data, textStatus, XMLHttpRequest){
        if(dataObject.postName && dataObject.postName!=""){
          // ...
        }
      }
    });
    Voili.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 54
    Points : 56
    Points
    56
    Par défaut
    Alors, la suite ça consiste à trouver comment faire la même chose avec IE.
    IE8 en tout cas ne semble pas gérer la fonction overrideMimeType().
    Donc si vous avez IE vous êtes foutus.

    Si par hasard quelqu'un savait comment forcer l'encodage de la réponse AJAX avec IE il serait fort aimable de nous en faire part.... étant donné que si on fait de l'AJAX sur un site en iso-8859-1 qui ne précise pas son charset dans le Content-Type header de la réponse on n'a pas vraiment d'autre choix.

    Merci.

Discussions similaires

  1. [AJAX] Exécuter JS dans réponse Ajax
    Par riete dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 03/11/2008, 17h38
  2. [AJAX] Comment gérer des réponses ajax simultanées ?!
    Par jahjah92 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/09/2007, 21h48
  3. [AJAX] Encodage caractères
    Par pit9.76 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/09/2006, 17h51
  4. [AJAX] texte réponse Ajax dans un conteneur div
    Par grinder59 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 12/02/2006, 18h07
  5. [Prototype] La réponse Ajax...
    Par SpaceFrog dans le forum Bibliothèques & Frameworks
    Réponses: 24
    Dernier message: 25/01/2006, 14h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo