完成就绪状态后,清除缓存后,JS函数只会运行一次?

Posted

技术标签:

【中文标题】完成就绪状态后,清除缓存后,JS函数只会运行一次?【英文标题】:When ready state is completed, a JS function would run only one time after clearing cache? 【发布时间】:2021-11-15 17:29:56 【问题描述】:

readyState 完成后,会执行一些代码,但它在 chrome 浏览器上不起作用,直到清除缓存然后它只运行一次。如果我刷新,该代码将不会再次执行,直到再次清除缓存并且它只运行一次。我必须在就绪状态完成时执行代码,因为它运行在一个数据表上,该数据表在就绪状态完成之前不会被加载。我尝试在Documnt.ready 上执行相同的代码,但它没有找到数据表元素的ID,所以什么也没发生。这是使用的代码:

$(document).on("readystatechange", function(e) 
        if (document.readyState == "complete") 
            $(`#salaries-datatable-table`).wrap("<div class='col-12' style='overflow-x:auto'></div>");
            $("#salaries-datatable-table_wrapper .dt-buttons").append(`<button class="btn btn-outline- 
              blue btn_size">OK</button>`);
        
    );

结果是:对于包装,不仅表会被包装,而且它的容器 div 也会被包装,对于附加,除了清除缓存后代码第一次运行之外,什么都不会发生,按钮将被附加并且只有表会被包装.我希望我能适当地解释一下。

【问题讨论】:

OT - 认为您的意思是缓存而不是现金。一个是(短期)存储,另一个是货币。 是的,我的意思是缓存(清除浏览数据)。抱歉这个冲突,我已经编辑了问题 【参考方案1】:

这个解决方案对我有用: 经过搜索,发现Eventinit.dt是在数据表初始化后触发的,所以不需要检查ready状态是否完成,on init.dt在ready状态完成前触发及其行为在移动设备或chrome浏览器上没有区别,与清除缓存无关,使用的代码:

$(`#salaries-datatable-table`).on('init.dt', function() 
      console.log('Table initialisation complete ');
      $(this).wrap("<div class='col-12' style='overflow-x:auto'></div>");
      $(this).find(".dt-buttons").append(`<button class="btn">OK</button>`);
    ); 

但是,当就绪状态完成时,我仍然没有得到什么。希望有人能解释一下。

【讨论】:

以上是关于完成就绪状态后,清除缓存后,JS函数只会运行一次?的主要内容,如果未能解决你的问题,请参考以下文章

并发

线程的状态

PHP require 在清除 APC 缓存后仅工作一次,然后出现 500 错误。为啥?

即使在清除本地缓存后,Heroku网站也只是第一次加载缓慢?

Flask---钩子函数

Javascript实现页面加载完成后自动刷新一遍清除缓存文件