在rails 3上没有触发AJAX调用

时间:2012-11-22 14:17:55

标签: jquery ajax ruby-on-rails-3

我有一个看起来像这样的表格

<%= form_tag(suggestions_path, :remote => true, :id=>"suggestpopform") do %>
 <p>
   Subject:<br />
   <%= text_field_tag "subject" %>
 </p>

 <p>
   Feedback or suggestion on anything:<br />
   <%= text_area_tag "description", "", :size=>"50x20" %>
 </p>

 <p>
   <%= submit_tag 'Submit' %>
 </p>
<% end %>

这导致调用create.js.erb

但是,由于创建操作会发送电子邮件,因此会有延迟。所以我想让ajax开始使用ajax时使表单消失:使用create.js.erb之前(或加载)像这样

$("#suggestpopform").bind("ajax:before",function() {
    $("#suggestpop").html("Thanks a lot!");
});

但无论我尝试什么,都没有任何反应。

但是,如果我在create.js.erb中只有$("#suggestpop").html("Thanks a lot!");它可以正常工作。

如何使用ajax:before或ajax:loading?

2 个答案:

答案 0 :(得分:1)

由于表单是部分的,您应该在 main html.erb文件中使用以下javascript来呈现部分:

$(document).on("ajax:beforeSend", "#suggestpopform", function() {
      $("#suggestpop").html("Thanks a lot!");
});

答案 1 :(得分:1)

事件是在文档上触发的,而不是在“#suggestpopform”中触发,因此您需要将句柄连接到文档,而不是特定的表单。

放置此代码的正确位置将在

  

应用程序/资产/ Javascript角/ .js.coffee

此外,在发送请求之前触发的事件的名称是:

  

AJAX:beforeSend

这与大多数教程和文档中的内容不同,因为它最近才更改。

您的代码,在该文件中应该类似于:

$(document).ready(
            -> 
                $(document).on("ajax:beforeSend", (event)->
                    $(event.target).html("Thanks a lot!");
                );
)

希望这有帮助,