Rails - 如何编写jQuery来处理服务器响应的JSON数据?

时间:2014-03-16 08:50:49

标签: ruby-on-rails ajax json

在Rails中,如果我将remote: true添加到链接,那么它将使用Ajax请求,但是当服务器发回JSON时,在客户端,我应该写什么来处理这些数据?

有人能帮帮我吗?感谢。

更新

在Rails中,像这段代码一样,只需添加remote: true,它就会使用Ajax发送请求:

<%=  form_tag(add_link_to_a_shared_list_url, :method => "post", :remote => true) do %>
    <%= select_tag "shared_list_id", options_from_collection_for_select(@shared_lists, "id", "title") %>
    <%= hidden_field_tag(:link_id, link.id) %>
    <%= submit_tag "submit", :class => "btn btn-default" %>
<% end %>

我想编写一些jQuery代码来捕获JSON并将其放入DOM中。

确切地说,处理Ajax请求的代码我们不需要编写,因为它是由Rails处理的,但是我们需要编写处理JSON Data的代码来响应服务器。

2 个答案:

答案 0 :(得分:0)

https://api.jquery.com/jQuery.ajax/

一个简单的例子是:

    $.ajax({
            type: "GET",
            url: "url",
            data: {
                   input : yourInput
            },
            success: function(output){
                   // do something with the output
            }
    })

答案 1 :(得分:0)

您应该区分UJS和JSON API。

UJS:服务器返回Javascript,客户端接收直接执行(不需要remote:true,但是有format.json)。

$("new_reply_form").on "submit", (event) ->
  $.ajax(
    url: $(this).prop("action")
    dataType: "json"
).done (data) ->
  # local logic
  return

JSON API:服务器返回数据,客户端在执行之前接收本地处理。

第一名:remote:true

<%= form_for(@reply, remote: true) do |f| %>
  <div class="field">
    <%= f.label :body %><br />
    <%= f.text_area :body %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

第二名:format.js

   def create                                                                          
     @entry = Entry.new(params[:entry])                                                

     respond_to do |format|                                                            
       if @entry.save                                                                  
         format.html { redirect_to @entry, notice: 'Entry was successfully created.' } 
         format.js                                                                     
       else                                                                            
         format.html { render action: "new" }                                          
         format.js                                                                     
       end                                                                             
     end                                                                               
   end                                                                                 

第三名:action_name.js.erb

<% if @reply.errors.empty? %>                                                          
  $('<%= j(render :partial => 'reply', :object => @reply) %>').appendTo($('#replies'));
<% else %>
  alert('@reply.errors.full_messages.join(',')');                                      
<% end %>

更多内容请参阅Working with JavaScript in Rails