【问题标题】:Rails remote and jquery ajaxStopRails 远程和 jquery ajaxStop
【发布时间】:2020-08-02 06:03:38
【问题描述】:

Rails 5.2 和 gem 'jquery-rails'、'jquery-ui-rails'

我正在尝试使用以下处理程序 .ajaxStop( handler ),如下所述:https://api.jquery.com/ajaxStop/#ajaxStop-handler

我在同一个页面上有多个 rails(远程)表单。单击按钮时,所有表单都已提交,所有 ajax 调用都已成功发送,并且每个表单的每个 .on("ajax:success") 事件都会被触发。到目前为止,一切都很好。问题是我想在所有 ajax 调用都完成后执行一些 JS 代码。

我按照 jquery 文档中的描述尝试了以下操作:

$( document ).ajaxStop(function() {
    console.log("test1");
});

也试过这个,因为我在 Rails 文档页面 https://edgeguides.rubyonrails.org/working_with_javascript_in_rails.html#rails-ujs-event-handlers 上找到了这个事件名称:

$(function() {
  $( document ).on("ajax:stopped", function() {
    console.log("test2");
  });
});

没有运气。什么都没有打印出来。

有什么方法可以用 Rails 做到这一点吗?我应该使用什么正确的事件?

【问题讨论】:

    标签: javascript jquery ruby-on-rails ajax


    【解决方案1】:

    .ajaxStop 没有工作吗?当所有 ajax 请求完成时,它是 jquery 的回调。 Rails ajax:stopped 事件在单个 ajax 请求停止时触发。

    如果您愿意,您可以做一些自定义的事情,您可以侦听ajax:beforeSend 事件并增加当前活动的 ajax 请求的全局计数器和ajax:complete 事件以减少该计数器。递减计数器后,检查 if == 0 以运行您的代码。但这只会计算rails生成的ajax请求,你应该可以使用jQuery的方法来计算所有jquery的ajax请求。

    【讨论】:

    • 至少我无法让.ajaxStop 工作。感谢您对自定义方法的建议。它类似于我现在正在做的事情,计算这个特定的表单事件,并减少成功/错误,但它很丑,所以如果有办法做到这一点,我宁愿使用标准事件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    相关资源
    最近更新 更多