Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在加载时调用函数一次,然后在每个间隔使用setTimeout_Javascript - Fatal编程技术网

Javascript 在加载时调用函数一次,然后在每个间隔使用setTimeout

Javascript 在加载时调用函数一次,然后在每个间隔使用setTimeout,javascript,Javascript,我在一个文件中有一个JS脚本,它从一个内联脚本获取超时值,我没有能力更改它,只有JS脚本 生成的HTML看起来像这样,我无法控制: <html> <head> <script="script-i-have-control-over.js"></script> window.statusTimeout="3000"; </head> 此函数仅在第一次执行后工作,因为window.statusTimeout

我在一个文件中有一个JS脚本,它从一个内联脚本获取超时值,我没有能力更改它,只有JS脚本

生成的HTML看起来像这样,我无法控制:

<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);