【问题标题】:jQuery ajax:before eventjQuery ajax:事件前
【发布时间】:2011-06-02 03:48:24
【问题描述】:

我见过一些同事在 Rails 中使用它

    $('[data-once=true]').live('ajax:before', function(request, e) {

});

但是我尝试将它与 jquery 一起使用并且它不起作用,这个事件是否与 rails jquery 适配器一起提供?

【问题讨论】:

    标签: javascript ruby-on-rails ajax jquery


    【解决方案1】:

    这个'ajax:before' 不是.live() 处理的有用事件,除非您使用该名称定义了一个自定义事件。

    【讨论】:

    • 为什么?如果您动态加载远程表单,您还希望让侦听器为此工作。
    • @duddle:当这个答案正确时,不要投反对票。正如我已经说过的,'ajax:before' 不是对.live() 有用的事件,除非您使用该名称定义了自定义事件。我并不是说让特定事件执行特定任务没有用。我是说live() 默认情况下不识别该事件。您需要手动定义自定义事件。
    • 好吧,live() 确实 在 Rails 中默认识别该事件。由于您在不尊重 Rails 上下文且未尝试提供解决方案的情况下做出该声明,因此我发现您的回答不是很有帮助。
    • @duddle:我承认我忽略了有关 Rails jQuery 适配器的部分。有趣的是,当一个答案没有尝试解决.live() 问题时,您对我的投票(这是正确的)投了反对票,而另一个答案则暗示了.live() 似乎无法识别的另一个事件。顺便说一句,尚不清楚 OP 是否使用 Rails。仅声明同事使用它,并且已经看到该事件与 live() 一起使用。由于 OP 知道适配器,我建议他使用 Rails。
    • 嗯,对我来说,这不是正确的,而是有用的。其他答案为找到正确的解决方案提供了起点,具有建设性,并指向框架文档或源代码中的相关部分。一方面,您可以更具描述性并实现真正的知识转移。另一方面,我希望答案至少包含一个关于如何进行以找到解决方案的想法。丰富您的答案,以便我可以删除反对票。但我也必须同意,这个问题对于 Rails 上下文并不清楚,我可能误解了这一点。
    【解决方案2】:

    我不是 rails 开发人员,所以我不确定 rails 是如何改变这个等式的,但这就是我之前在普通 ole' JS 中将函数附加到 AJAX 的方式:

    $.ajax({
       beforeSend: function(){
    
         alert("Before");
    
       },
       complete: function(){
    
        alert("after");
    
       }
     });
    

    请注意,这些事件会为之后的所有 AJAX 请求触发。您实际上是在订阅 AJAX 对象。

    请参阅jQuery AJAX Events Documentation 了解更多信息。

    【讨论】:

    • 那么普通的 ole JS 意味着 jQuery?
    【解决方案3】:

    是的,ajax:before 是一个 jQuery 事件,用于添加/触发,尽管在最新版本中它不是 ajax:beforeSend。虽然在 jQuery 中(ajax:before 在 JS 框架对 Rails 进行不可知更改之前就已经存在),但您可以使用 ajaxSend global event 全局附加到它,如下所示:

    $(document).bind('ajaxSend', function(e, request, options) {
      $('[data-once=true]').something();
    });
    

    【讨论】:

    • 尼克:你确定ajaxSend 可以和.live() 一起使用吗?它仅适用于.bind()(并不意味着我没有遗漏任何东西)。
    • @patrick - 您使用的是哪个版本的 jQuery?全球事件在不同版本中发生了巨大变化。
    • 尼克:使用 1.4.4。 Here's an example 使用 .live()here's an example 使用 .bind()。两者都在success 上登录到控制台,但只有bind 版本在ajaxSend 上这样做。
    • @patrick - 你直接在ajaxSend 上,我将调整我上面的示例......他们代理触发器的方式它与@一起工作987654339@,并没有真正考虑到我原来的变通代码。
    • 尼克:“代理触发器...”我会微笑着点头,假装我明白你的意思。 ;o) 我确定你是对的。 +1 对 .live() 的好解决方法。
    猜你喜欢
    • 2010-11-17
    • 2018-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多