Rails 远程和 jquery ajaxStop

Posted

技术标签:

【中文标题】Rails 远程和 jquery ajaxStop【英文标题】:Rails remote and 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 做到这一点吗?我应该使用什么正确的事件?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

至少我无法让.ajaxStop 工作。感谢您对自定义方法的建议。它类似于我现在正在做的事情,计算这个特定的表单事件,并减少成功/错误,但它很丑,所以如果有办法做到这一点,我宁愿使用标准事件。

以上是关于Rails 远程和 jquery ajaxStop的主要内容,如果未能解决你的问题,请参考以下文章

jquery ajaxstart ajaxstop show hide

Rails - 为啥远程提交我的表单后 jQuery 不加载

使用 jQuery 中止 Ajax 请求

杂记 包含 serialize().ajaxStart() .ajaxStop()以及其他

jQuery Mobile 在使用 UJS 远程链接接受标头时中断 Rails respond_to

数据类型 JS 的 Rails 4 远程请求回调问题