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 不加载
杂记 包含 serialize().ajaxStart() .ajaxStop()以及其他