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

Ruby on Rails Discussion :

Ajax et les accents avec "before_filter :headers_iso"


Sujet :

Ruby on Rails

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 68
    Points : 61
    Points
    61
    Par défaut Ajax et les accents avec "before_filter :headers_iso"
    Bonjour

    J'ai utilisé la fonction de la faq "Comment afficher les caractères accentués dans Rails" pour afficher correctement les accents avec ruby/rails:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class ApplicationController < ActionController::Base
      before_filter :headers_iso
     
      def headers_iso
        headers["content-type"]= "text/html; charset=iso-8859-1"
      end
    end
    Mais les appels Ajax depuis un controller ne fonctionnent plus (du type page.replace_html ....).
    Si je supprime le filtre, ca marche...

    Peut-etre que c'est normal mais je ne comprend pas pourquoi. Si quelqu'un a une idée sur le sujet... Merci.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 104
    Points : 120
    Points
    120
    Par défaut
    Normalement un vrai appel Ajax est censé récupérer du XML, or là tu forces Rails à renvoyer du HTML encodé en ISO dans tous les cas.

    Il faut donc a mon avis que tu différencies les cas, avec un truc genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if request.xml_http_request?
    headers["content-type"]= "text/xml; charset=utf-8"
    else
    headers["content-type"]= "text/html; charset=iso-8859-1"
    end
    ( note que le request.xml_http_request? ne marche pas toujours, ca dépend de quelle librairie JS tu utilises, au pire tu peux toujours faire ton test maison sur les paramètres de la requete )

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 68
    Points : 61
    Points
    61
    Par défaut
    Merci pour tes eclaircissements.....

    Effectivement l'appel a request.xml_http_request? ne fonctionne pas...
    Mais au moins je sais pourquoi ca ne marche pas!

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 104
    Points : 120
    Points
    120
    Par défaut
    Tu peux peut etre essayer de tester la présence de "text/xml" dans le "Accept" de la requète. Ou au pire, tu rajoutes un paramètres xml=1 dans ton URL et tu fais un test sur le params[ : xml] et basta.

  5. #5
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 68
    Points : 61
    Points
    61
    Par défaut
    En fait l'appel de xml_http_request? fonctionne bien.
    J'ai mis ce code dans ma fonction headers_iso :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if request.xhr?
          puts "REQUETE XML"
          headers["content-type"]= "text/xml; charset=utf-8"
    else
          puts "REQUETE HTML"
          headers["content-type"]= "text/html; charset=iso-8859-1"
    end
    Les affichages sont corrects dans la console.
    Mais les appels Ajax ne fonctionnent toujours pas....
    .... une idée???

  6. #6
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 68
    Points : 61
    Points
    61
    Par défaut
    En écrivant mon code comme ça, ça marche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    def headers_iso
        if request.xhr?
          puts "REQUETE XML"
          headers["content-type"]= "text/javascript; charset=utf-8"
        else
          puts "REQUETE HTML"
          headers["content-type"]= "text/html; charset=iso-8859-1"
        end
    end
    Peut-etre ça peut créer d'autres problèmes??
    ... sinon mon problème semble résolu...

  7. #7
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    Si ça ne te dérange pas, je reprendrai bien ta solution pour mettre à jour la FAQ...

    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  8. #8
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 68
    Points : 61
    Points
    61
    Par défaut
    Pas de problème, même ça fait plaisir!

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 104
    Points : 120
    Points
    120
    Par défaut
    Bizarre ton histoire de text/javascript...

    C'est du vrai AJAX que tu fais ? Ou de l'AJAH/AJAJ ?
    Normalement, si tu fais un appel Ajax ton action doit générer du XML. Après beaucoup font du "pseudo-Ajax" et renvoie non pas du XML, mais directement un bout de page HTML ( ce que j'appelle AJAH ). Et enfin y a encore une autre formule qui consiste à renvoyer non pas du XML, ni du HTML, mais directement un autre script javascript ( AJAJ donc ) qui sera interprété par le navigateur.

    Donc selon ce que ton appel AJA attend en retour il faut adapter le content/type en conséquence.

  10. #10
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 68
    Points : 61
    Points
    61
    Par défaut
    Je suis bien d'accord avec toi...
    Ma solution me semble bizarre, limite un peu suspecte...!

    Pourtant meme avec un test le plus simple possible dans mon controller :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    def replace_text
        render(:update) { |page|
          page.replace_html "bout_de_texte", "COUCOU"
        }
    end
    ca genère une page en text/javascript.....
    ??

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AJAX] les accents avec ajax
    Par kaking dans le forum Général JavaScript
    Réponses: 18
    Dernier message: 25/01/2009, 11h13
  2. Réponses: 3
    Dernier message: 12/12/2007, 20h31
  3. [AJAX] Ajax et les accents
    Par nico-pyright(c) dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 09/12/2005, 20h09
  4. Ecrire caractère avec les accents avec vi ?
    Par sekiryou dans le forum Applications et environnements graphiques
    Réponses: 7
    Dernier message: 18/05/2004, 17h11

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