在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的代码来响应服务器。
答案 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 %>