Codeschool 的rails 课程给出了下面的代码来使用 json (format.json) 做 ajax。为什么代码与使用不显眼的 javascript (format.js) 进行 ajax 的方式如此不同?
具体来说,我注意到下面的代码完全避免了 UJS,并且没有remote: true
在form_for
. 这与remote: true
在form_for
.
为什么remote: true
不建议使用带有 json 的 ajax?我原以为带有 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)"