繁体   English   中英

Rails远程表单回调ajax:加载不会触发,其他人则执行

[英]Rails remote form callback ajax:loading does not fire, others do

这是我的代码:

$('#fb_login_form').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:successajax:complete开火,我看到两个警报。 ajax:loading没有。

我使用的是jQuery而不是原型。 为什么?

请使用以下链接更正您的ajax事件方法名称

http://docs.jquery.com/Ajax_Events

@ user531065实际上是正确的,Rails 3实现了自己的回调名称。 它是在rails.js(Prototype)或jquery_ujs.js(jQuery)驱动程序中实现的。 这两个驱动程序都扮演javascript角色,使AJAX链接和表单不引人注目。

我正在将Rails 2.3应用程序迁移到Rails 3并遇到类似的问题,回调没有触发。

需要注意的一件事是,如果您使用的是Prototype驱动程序,请使用Prototype来定义您的回调:

$('edit_foo').observe('ajax:before', loading_function());
$('edit_foo').observe('ajax:complete', complete_function());

使用原始问题中的语法来获取Jquery UJS驱动程序。 如果你不确定你有UJS驱动程序,检查public/javascripts的任何rails.js或jquery_ujs.js。 这适用于Rails 3.0; 我相信Rails 3.1更改为使用jquery作为默认的UJS驱动程序。

无论你有哪个UJS驱动程序,你都应该能够查看文件内部并验证是否存在以下回调: ajax:beforeSendajax:successajax:completeajax:error

实际上有几个原因导致我的AJAX回调没有触发:

  • 使用不同的JavaScript库来定义UJS驱动程序的回调
  • 同时使用两个javascript库(这可以完成,但需要调用jQuery.noConflict()
    • 首先包括prototype
    • jqueryjquery_ujsapplication javascript包含标记之后调用jQuery.noConflict() ,但在包含其他js库的标记之前
    • 不要在使用两个库时调用javascript_include_tag :defaults ,因为您必须指定js include order

编辑 :您的问题的答案在于此链接 显然,Rails UJS驱动程序实现的原始6个ajax事件是: ajax:beforeajax:loadingajax:successajax:failureajax:completeajax:after

这6个被编辑为:

  • AJAX:beforeSend
  • AJAX:成功
  • AJAX:完成
  • AJAX:错误

您的事件被解雇的原因是因为它们没有变化。 另一个没有开火,因为它已被移除。 您可能正在查看旧文档,可能是Rails 3的早期版本或预发行版。

有效的Ror Ajax回调

ajax:beforeSend // equivalent to ajax:loading in earlier versions
ajax:success
ajax:complete
ajax:error // equivalent to ajax:failure in earlier versions

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM