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 :

[RJS] Erreur RJS à devenir fou


Sujet :

Ruby on Rails

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Points : 6
    Points
    6
    Par défaut [RJS] Erreur RJS à devenir fou
    Bonjour,

    j'essaye d'appliquer un exercice présent dans de nombreux tutoriels, soit enlever une ligne dans une liste avec un effet ajax, pour éviter le lien "destroy" qui recharge la page:

    ainsi dans ma liste:
    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
     
     
    <% for comment in @comments %>  
    <tr  id="comment_<%=comment.id%>">
      <% for column in Comment.content_columns %>
        <td><%=h comment.send(column.name) %></td>
      <% end %>
        <td><%= link_to 'Show', :action => 'show', :id => comment %></td>
        <td><%= link_to 'Edit', :action => 'edit', :id => comment %></td>
        <td><%= link_to 'Destroy', { :action => 'destroy', :id => comment }, :confirm => 'Are you sure?', :method => :post %></td>
        <td>
           <%= link_to_remote "ajax destroy", :url=>{ :action => 'delete_ajax_comment',:id =>comment.id} %>
         </td>
        </tr>
    <% end %>
    j'appelle donc dans mon controlleur, la méthode "delete_ajax_comment"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      def delete_ajax_comment
        @comment=Comment.find(params[:id])
        @comment.destroy
      end
    finalement pour gèrer l'affichage, j'ai créé un fichier "delete_ajax_comment.rjs"

    effectuant ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    page.remove "comment_#{@comment.id}"
    voila mon problème:
    - le commentaire est bien effacé de la DB quand je clique sur "ajax destroy"
    - la ligne n'est pas effacée de la page

    ce que j'ai vérifié:
    - avec firebug, je vois la requête POST "http://localhost:3000/en/tests/comment/delete_ajax_comment/8 (72ms)"

    je vois la réponse du serveur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    try {
     
    Element.remove("comment_8");
     
    } catch (e) { alert('RJS error:\n\n' + e.toString()); alert('Element.remove(\"comment_8\");'); throw
     
     e }
    - j'ai évidemment vérifié la présence des javascripts (prototype etc.. ) dans la source.

    je n'ai pas d'erreurs javascript dans la console d'erreur, et aucuns messages étranges dans firebug, mise a part mon élément qui ne s'enlève pas de la page tout semble fonctionner normalement et sans bugs...

    vu que mon commentaire s'efface de la db, que je n'ai ni erreur 500 ni 404 dans ma réponse dans firebug, je ne sais plus ou chercher....


    je n'ai pas d'autres fantaisies dans mes pages, dispose d'un code XHTML simple.... je n'arrive pas a voir ce que j'ai oublié.... sans résoudre entièrement mon problème, ou me refaire un ènième tutoriel a ce sujet.... quelqu'un aurait une idée à me suggèrer pour guider mon débuggage ?

    merci

    julien

  2. #2
    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
    Est-ce que tu ne forcerai pas quelque part (application.rb ?) le content-type ? ça pourrait expliquer pas mal de choses...

    Normalement, ça devrait être ça :

    Content-Type text/javascript; charset=utf-8
    Est-ce qu'éventuellement, tu pourrai nous copier les headers renvoyés par firebug STP ?
    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

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    je définis le charset dans application.rb avec ceci (mon application utilise globalize, et effectue un "set locale" et un "set charset")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      before_filter :set_charset
     
      def set_charset
        content_type = headers["Content-Type"] || "text/html"
        if /^text\//.match(content_type)
          headers["Content-Type"] = "#{content_type}; charset=utf-8"
        end
      end
    quand à mon header dans firebug, le voici:
    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
     
    Response Headers
    Cache-Control	no-cache
    Connection	Keep-Alive
    Date	Tue, 24 Jul 2007 13:03:19 GMT
    Content-Type	text/html; charset=utf-8
    Server	WEBrick/1.3.1 (Ruby/1.8.5/2006-08-25)
    Content-Length	139
    Set-Cookie	_hexadance_session_id=8f36d7165522801728cd68636eee9d23; path=/
     
     
    Request Headers
    Host	localhost:3000
    User-Agent	Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.5) Gecko/20061201 Firefox/2.0.0.5 (Ubuntu-feisty)
    Accept	text/javascript, text/html, application/xml, text/xml, */*
    Accept-Language	en-us,en;q=0.5
    Accept-Encoding	gzip,deflate
    Accept-Charset	ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive	300
    Connection	keep-alive
    X-Requested-With	XMLHttpRequest
    X-Prototype-Version	1.5.0
    Content-Type	application/x-www-form-urlencoded; charset=UTF-8
    Referer	http://localhost:3000/en/tests/comment/
    Content-Length	0
    Cookie	_hexadance_session_id=8f36d7165522801728cd68636eee9d23; _hexadance_v2_session_id=744dbbe3328743813b222e0b0a624650
    Pragma	no-cache
    Cache-Control	no-cache
    merci

  4. #4
    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
    c'est bien ce qu'il me semblait

    Essaie de jouer avec le respond_to :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    def set_charset
        respond_to do |requete|
          requete.html {
            content_type = headers["Content-Type"] || "text/html" 
            if /^text\//.match(content_type)
              headers["Content-Type"] = "#{content_type}; charset=utf-8" 
            end
          }
          requete.js {
             headers["Content-Type"] = "text/javascript"
          }
        end
      end
    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

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    magnifique !!

    un grand merci !!

  6. #6
    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
    cela dit, j'ai testé sur une appli à moi, y'a encore des fois ou ça bug... j'ai l'impression que si tu fait un redirect_to entre ton action et ton RJS, ça ne marche plus...

    je cherche un moyen de corriger ça...
    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

  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
    bon, après pas mal de tests...

    Si on fait un redirect_to sur une action qui elle même fait appel à un fichier RJS, ça plante, le content-type est pourri.
    En revanche, si dans cette action, on fait un render :update, le content-type passe bien.

    Une solution est donc de préciser dans le redirect_to le format attendu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    redirect_to :action=>"toto", :format=>"js"
    Si j'arrive à comprendre ce comportement bizarre, je vous tiendrai informés
    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
    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
    apparament, on peut détecter si une requête est une requête RJS en faisant :

    à tester
    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

  9. #9
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Points : 652
    Points
    652
    Par défaut
    Le probleme de départ, c'est typiquement lorsqu'il manque un ":update" quelquepart...
    Soit dans la balise "link_to_remote" soit dans un bloc du controleur.

    J'arrive un peu tard pour répondre lol

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

Discussions similaires

  1. Passage de paramètre - A devenir fou.
    Par zapgillou dans le forum Langage
    Réponses: 2
    Dernier message: 05/12/2007, 06h46
  2. [RJS] ajoute_elt_box.rjs de Titoumimi + compteur
    Par MaitrePylos dans le forum Ruby on Rails
    Réponses: 7
    Dernier message: 09/08/2007, 10h35
  3. [INSERT]Problème insert Je vais devenir fou !
    Par Sephiroth_ttt dans le forum Forms
    Réponses: 5
    Dernier message: 27/06/2007, 14h41
  4. Réponses: 5
    Dernier message: 12/04/2007, 16h56
  5. [debutant]Vais devenir fou...
    Par Treuze dans le forum C
    Réponses: 4
    Dernier message: 04/01/2006, 18h33

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