Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery Rails远程表单回调ajax:加载不会启动,其他人会启动_Jquery_Ruby On Rails_Ajax - Fatal编程技术网

Jquery Rails远程表单回调ajax:加载不会启动,其他人会启动

Jquery Rails远程表单回调ajax:加载不会启动,其他人会启动,jquery,ruby-on-rails,ajax,Jquery,Ruby On Rails,Ajax,这是我的密码: $('#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',

这是我的密码:

$('#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:success
ajax:complete
触发,我看到两个警报<代码>ajax:加载不会


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

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


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

我正在将Rails2.3应用程序迁移到Rails3的过程中,遇到了一个类似的问题,回调没有启动

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

$('edit_foo').observe('ajax:before', loading_function());
$('edit_foo').observe('ajax:complete', complete_function());
使用Jquery UJS驱动程序原始问题中的语法。如果您不确定您有哪个UJS驱动程序,请检查rails.js或jquery_js.js的
public/javascripts
。这适用于Rails 3.0;我相信Rails3.1将使用jquery作为默认的UJS驱动程序

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

实际上,我的AJAX回调没有启动有几个原因:

  • 使用不同的javascript库定义来自UJS驱动程序的回调
  • 同时使用两个javascript库(这可以做到,但需要调用
    jQuery.noConflict()
    • 首先包括
      prototype
    • 调用
      jQuery.noConflict()
      jQuery
      jQuery\u ujs
      application
      javascript包含标记之后,但在包含其他js库的标记之前
    • 使用这两个库时,不要调用
      javascript\u include\u标记:defaults
      ,因为您必须指定js include顺序
编辑:问题的答案在于。显然,Rails UJS驱动程序实现的最初6个ajax事件是:
ajax:before
ajax:loading
ajax:success
ajax:failure
ajax:complete
ajax:after

这6条被编辑为:

  • ajax:在发送之前
  • 阿贾克斯:成功
  • ajax:完成
  • ajax:错误
触发事件2的原因是因为它们没有更改。另一个没有开火,因为它被移除了。您可能正在查看旧文档,可能是Rails 3的早期版本或预发行版。

:


是的,但是rails有自己的方法名和ajax:加载是一个有效的方法名,不是吗?不是,它不是一个有效的方法。尝试“ajax:beforeSend”而不是“ajax:loading”。因此,此“发送前”与“加载”的作用相同。当谈到jquery时,您必须使用“beforeSend”而不是“loading”。哇,谢谢!!有大量的文档在线引用
ajax:loading
,而不是
ajax:beforeSend
ajax:beforeSend // equivalent to ajax:loading in earlier versions
ajax:success
ajax:complete
ajax:error // equivalent to ajax:failure in earlier versions