Codeschool's rails课程给出了下面的代码,用json(format.json)做ajax。为什么代码与使用不显眼的javascript(format.js)进行ajax的方式有如此不同?
具体来说,我注意到下面的代码完全避免了UJS,并且在remote: true
中没有使用form_for
。这与在remote: true
中使用form_for
的不显眼的javascript方法非常不同。
为什么不使用json为ajax建议remote: true
?我原以为json的ajax会使用remote: true
并且有一些方法让客户端javascript将success
函数注册到UJS,以便服务器的响应被UJS解释为json数据并传递给success
函数而不是UJS尝试像在不显眼的javascript方法中那样执行javascript。
使用json进行ajax的方法是否比下面更好?
/views/zombies/show.html.erb
<div id="custom_phase2">
<%= form_for @zombie, url: custom_decomp_zombie_path(@zombie) do |f| %>
<%= f.text_field :decomp %>
<%= f.submit "Set" %>
<% end %>
</div>
/app/assets/javascripts/zombies.js.coffee
$(document).ready ->
$('div#custom_phase2 form').submit (event) ->
event.preventDefault()
url = $(this).attr('action')
custom_decomp = $('div#custom_phase2 #zombie_decomp').val()
$.ajax
type: 'put'
url: url
data: { zombie: { decomp: custom_decomp } }
dataType: 'json'
success: (json) ->
$('#decomp').text(json.decomp).effect('highlight')
$('div#custom_phase2').fadeOut() if json.decomp == "Dead (again)"
答案 0 :(得分:0)
您可以使用 remote_form_for 帮助程序:
/views/zombies/show.html.erb
<div id="custom_phase2">
<%= remote_form_for @zombie, url: custom_decomp_zombie_path(@zombie), :update => {:success => "form", :failure => "errors"} do |f| %>
<%= f.text_field :decomp %>
<%= f.submit "Set" %>
<% end %>
</div>
这里“form”是将在sucess上更新的元素的id,“errors”是元素的id,如果有错误将会更新。