2010-04-15 8 views
0

J'implémente une application facebook dans les rails utilisant le plugin facebooker, donc il est très important d'utiliser cette architecture si je veux mettre à jour plusieurs DOM dans ma page. si mon code fonctionne dans une application de rails réguliers, cela fonctionnerait dans mon application facebook. J'essaie d'utiliser ajax pour informer l'utilisateur que le commentaire a été envoyé, et mettre à jour le bloc de commentaires.comment utiliser ajax avec json dans ruby ​​sur rails

migration:

class CreateComments < ActiveRecord::Migration 
def self.up 
    create_table :comments do |t| 
     t.string :body 

     t.timestamps 
    end 
    end 

    def self.down 
    drop_table :comments 
    end 
end 
contrôleur

:

class CommentsController < ApplicationController 

    def index 
    @comments=Comment.all 
    end 

def create 
@comment=Comment.create(params[:comment]) 

    if request.xhr? 
     @comments=Comment.all 
     render :json=>{:ids_to_update=>[:all_comments,:form_message], 
       :all_comments=>render_to_string(:partial=>"comments"), 
       :form_message=>"Your comment has been added." } 
    else 
    redirect_to comments_url 
    end 
end 

fin

Vue:

<script> 
function update_count(str,message_id) { 
len=str.length; 
if (len < 200) { 
    $(message_id).innerHTML="<span style='color: green'>"+ 
    (200-len)+" remaining</span>"; 
} else { 
    $(message_id).innerHTML="<span style='color: red'>"+ 
    "Comment too long. Only 200 characters allowed.</span>"; 
} 
} 


function update_multiple(json) { 
for(var i=0; i<json["ids_to_update"].length; i++) { 
    id=json["ids_to_update"][i]; 
    $(id).innerHTML=json[id]; 
} 
} 

</script> 

<div id="all_comments" > 
<%= render :partial=>"comments/comments" %> 
</div> 

Talk some trash: <br /> 
<% remote_form_for Comment.new, 
    :url=>comments_url, 
    :success=>"update_multiple(request)" do |f|%> 
<%= f.text_area :body, 
:onchange=>"update_count(this.getValue(),'remaining');" , 
:onkeyup=>"update_count(this.getValue(),'remaining');" 
%> <br /> 
<%= f.submit 'Post'%> 
<% end %> 

<p id="remaining" >&nbsp;</p> 
<p id="form_message" >&nbsp;</p> 
<br><br> 
<br> 

si je tente de faire alert (JSON) dans la première ligne de la fonction update_multiple , j'ai un [objet objet]. Si j'essaie de faire une alerte (json ["ids_to_update"] [0]) dans la première ligne de la fonction update_multiple, aucune boîte de dialogue ne s'affiche. Toutefois, le commentaire a été enregistré mais rien n'a été mis à jour.

questions:

1.how peuvent javascript et les rails savent que je traite avec des objets JSON deos ROR envoyé un format d'objet ou d'un format texte?

2.Comment puis-je voir quel est le JSON retourné? Dois-je l'analyser? Comment?

2.Comment puis-je déboguer ce problème?

3.Comment puis-je le faire fonctionner?

Répondre

1

Vous devez analyser le JSON renvoyé dans votre javascript à l'aide d'un analyseur JSON.

Voici celui que j'utilise: https://github.com/douglascrockford/JSON-js/blob/master/json2.js

donc sur le succès que vous allez faire quelque chose comme:

var stuff = json.parse(returnedJSON) 
+0

ne peux pas obtenir que cela fonctionne, pouvez-vous me donner un exemple? merci – fenec

+0

que se passe-t-il lorsque vous essayez de l'analyser? –

+0

rien n'apparaît, il semble que c'est un objet nul – fenec

Questions connexes