как использовать AJAX с JSON в Ruby на рельсах - PullRequest
0 голосов
/ 15 апреля 2010

Я внедряю приложение facebook в рельсы, используя плагин facebooker, поэтому очень важно использовать эту архитектуру, если я хочу обновить несколько DOM на моей странице. если мой код работает в обычном приложении rails, он будет работать в моем приложении facebook.

Я пытаюсь использовать ajax, чтобы сообщить пользователю, что комментарий был отправлен, и обновить блок комментариев.

миграция:

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

Контроллер:

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

конец

вид:

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

если я попытаюсь сделать оповещение (json) в первой строке функции update_multiple, я получу [объектный объект].

если я пытаюсь сделать оповещение (json ["ids_to_update"] [0]) в первой строке функции update_multiple, диалоговое окно не отображается.

однако комментарий был сохранен, но ничего не обновлено.

Вопросы:

1. Как javascript и rails могут знать, что я имею дело с объектами json? Deos ROR отправил ему объектный формат или текстовый формат?

2.Как я могу увидеть, что такое возвращаемый JSON? Нужно ли мне его анализировать? Как?

2.Как я могу отладить эту проблему?

3.как заставить его работать?

1 Ответ

1 голос
/ 15 апреля 2010

Вы должны проанализировать возвращенный JSON в вашем javascript, используя анализатор JSON.

Вот тот, который я использую: https://github.com/douglascrockford/JSON-js/blob/master/json2.js

Итак, после успеха вы сделаете что-то вроде:

var stuff = json.parse(returnedJSON)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...