2010-09-16 50 views
17

我正在从rails 2.3.8升级到3.0.0,因此我需要用form_for(@object, :remote=>true)替换remote_form_for帮助器调用。Rails 3 AJAX远程表格回调

我一直在跟着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加载)

+2

这些日子我认为这个事件是'ajax:error'。 – 2012-01-10 01:53:19

+0

我使用rails 3.2.11,仍然回调不起作用?任何帮助或想法? – 2013-01-14 11:27:38

+0

@TaimoorChangaiz也许我的回答可以帮助你http://stackoverflow.com/a/16759013/946328 – 2013-05-26 12:01:00

回答

20

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

这样做,默认原型rails.js不会连接回调。

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

+0

如果您链接或提供了一个样例,那么这将对您有所帮助 – jcollum 2012-12-21 03:07:16

+0

@jcollum,删除基于原型的rails.js, public/javascripts /'并将其替换为基于jQuery的版本 – SooDesuNe 2012-12-21 03:41:02

2

可以触发基于原型的回调,像这样:

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

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

不过,我不认为request对象在ajax:complete回调包含响应。我习惯了jQuery,并希望访问响应很简单。相反,它看起来像切换到jQuery-Rails可能仍然更容易,因为我似乎无法找到直接的原型代码来替代Rails 2远程助手中的:update功能。

0

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