我正在从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加载的)
答案 0 :(得分:20)
按照我的方式进行,默认原型rails.js
不会链接回调。
转换为基于jQuery的rails.js
(http://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,在删除其中一个之后,一切正常。