0

Codeschool 的rails 课程给出了下面的代码来使用 json (format.json) 做 ajax。为什么代码与使用不显眼的 javascript (format.js) 进行 ajax 的方式如此不同?

具体来说,我注意到下面的代码完全避免了 UJS,并且没有remote: trueform_for. 这与remote: trueform_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)"
4

1 回答 1

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”是成功时更新的元素的id,“errors”是出现错误时更新的元素的id。

参考:这里这里

于 2013-02-15T16:58:35.287 回答