Rails 3 AJAX远程表单回拨

时间:2010-09-16 01:38:47

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

我正在从rails 2.3.8升级到3.0.0,因此我需要用remote_form_for替换form_for(@object, :remote=>true)辅助调用。

我一直在关注Simone Carletti,但我似乎无法从rails.js获取ajax回调。

我生成的HTML是:

<form accept-charset="UTF-8" action="/vendor_shipments" class="new_vendor_shipment" data-remote="true" id="formname" method="post">

我正在测试的javascript:

jQuery(function($){ 
   alert('document ready');
   $("#formname")
      .bind('ajax:loading', function() {alert("loading!");})
      .bind('ajax:success', function(data, status, xhr) {alert("success!");})
      .bind('ajax:failure', function(xhr, status, error) {alert("failure!");})
      .bind('ajax:complete', function() {alert("complete!");});
});

“文档就绪”警报触发,ajax请求成功执行(数据发布到服务器),但没有“ajax:____”回调触发。

我做错了什么?

(对于它的价值,表单本身是通过ajax加载的)

3 个答案:

答案 0 :(得分:20)

哇,这是一个巨大的浪费一个晚上。

按照我的方式进行,默认原型rails.js不会链接回调。

转换为基于jQuery的rails.jshttp://github.com/rails/jquery-ujs)后,回调工作正常。

答案 1 :(得分:2)

您可以触发基于Prototype的回调,如下所示:

$('formname').observe('ajax:before', function(){
  ...
});

$('formname').observe('ajax:complete', function(request){
  ...
});

但是,我认为request回调中的ajax:complete对象不包含响应。我习惯了jQuery,并希望访问响应很简单。相反,看起来切换到jQuery-Rails可能仍然更容易,因为我似乎无法找到插入式Prototype代码来替换Rails 2远程帮助器中的:update功能。

答案 2 :(得分:0)

如果接受的答案没有解决您的问题,请检查您是否嵌入了多个jQuery库。在我的情况下,我嵌入了两个不同版本的jQuery,在删除其中一个之后,一切正常。