Javascript 在加载时调用函数一次,然后在每个间隔使用setTimeout
我在一个文件中有一个JS脚本,它从一个内联脚本获取超时值,我没有能力更改它,只有JS脚本 生成的HTML看起来像这样,我无法控制:Javascript 在加载时调用函数一次,然后在每个间隔使用setTimeout,javascript,Javascript,我在一个文件中有一个JS脚本,它从一个内联脚本获取超时值,我没有能力更改它,只有JS脚本 生成的HTML看起来像这样,我无法控制: <html> <head> <script="script-i-have-control-over.js"></script> window.statusTimeout="3000"; </head> 此函数仅在第一次执行后工作,因为window.statusTimeout
<html>
<head>
<script="script-i-have-control-over.js"></script>
window.statusTimeout="3000";
</head>
此函数仅在第一次执行后工作,因为window.statusTimeout在第一次执行时未定义,但在第二次执行时获取值3000
我认为问题在于最后的getStatus()调用是在页面加载时执行的。此外,我希望getStatus()的第一次调用能够获得window.statusTimeout的值,setTimeout只能在3000ms之后触发,然后每3000ms触发一次
当前,getStatus函数在页面加载时执行两次,第一次失败,第二次工作,然后每3000ms继续工作
我哪里做错了?重申一下,我无法控制HTML中的内联JS。我也需要AJAX在页面加载时尽快完成它的工作。问题似乎是,脚本一读取就调用了
getStatus
,这是在窗口之前。设置了statusTimeout
这将延迟对getStatus的第一次调用,直到窗口的加载事件:
window.addEventListener('load', getStatus);
这可能为窗口提供足够的时间。statusTimeout=“3000”代码>待评估
或者您可以简单地更改这一行:
setTimeout(getStatus, window.statusTimeout);
致:
你为什么要重新发明setInterval
?window.statusTimeout在这种情况下永远不可用,总是返回undefined,因此浏览器会不断调用getStatus()。因此,在DOMContentLoaded
中调用setInterval
,而不是在顶层调用。您创建了一个无限递归循环,在其中创建了一个infinte新的XMLHttpRequest,你只需要其中一个…@乔乔先生我不明白你的意思?我怎么能不这样做呢?“window.addEventListener('load',getStatus);”似乎很好地完成了这项工作——尽管我还不能100%确定浏览器的兼容性。
setTimeout(getStatus, window.statusTimeout);
setTimeout(getStatus, window.statusTimeout || 3000);