Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > AJAX
AJAX Forum sur la programmation AJAX. Avant de poster : Cours AJAX, FAQ AJAX, Toutes les FAQ JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/01/2011, 10h55   #1
Nouveau Membre du Club
 
Inscription : septembre 2008
Messages : 53
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 53
Points : 31
Points : 31
Par défaut 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 :
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);
Beho Double est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 07h26   #2
Nouveau Membre du Club
 
Inscription : septembre 2008
Messages : 53
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 53
Points : 31
Points : 31
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 :
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 :
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.
Beho Double est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 11h36   #3
Nouveau Membre du Club
 
Inscription : septembre 2008
Messages : 53
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 53
Points : 31
Points : 31
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.
Beho Double est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h00.


 
 
 
 
Partenaires

Hébergement Web