Javascript 为什么这个ajax调用只运行一次
在我的Html中,我有一个ajax函数,它意味着每5秒调用一次,检查任务是否完成,并继续执行直到完成,然后重定向 但似乎只有一次,有什么不对Javascript 为什么这个ajax调用只运行一次,javascript,html,ajax,Javascript,Html,Ajax,在我的Html中,我有一个ajax函数,它意味着每5秒调用一次,检查任务是否完成,并继续执行直到完成,然后重定向 但似乎只有一次,有什么不对 <script> /** Check Progress */ function checkprogress(routepath) { var xhr = new XMLHttpRequest(); xhr.on
<script>
/**
Check Progress
*/
function checkprogress(routepath)
{
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function()
{
if (this.readyState == 4 && this.status == 200)
{
var response = xhr.responseText;
if(response.endsWith('.html')||response.startsWith('/'))
{
window.location.href=response;
}
else
{
document.getElementById('progressbars').innerHTML = response;
}
}
};
xhr.open('GET',routepath + '.update_progress', true);
xhr.send();
};
</script>
<script>
setInterval(checkprogress('/editsongs'), 5000);
</script>
函数的计算结果为未定义。 改用匿名函数:
setInterval(function(){checkprogress('/editsongs')}, 5000);
setIntervalcheckprogress'/editsongs',5000不会使用该参数调用checkProgress,而是在调用setInterval时立即执行checkProgress,返回未定义的结果。因此,您当前的代码基本上是:
checkprogress('/editsongs');
setInterval(undefined, 5000);
以此为例:
函数adda,b{
console.log添加+a+和+b;
返回a+b;
}
控制台。日志结果:,添加1,2;
//setIntervaladd1,2,5000;
//基本上
//SETInterval35000;
//因此,请使用匿名函数:
设置间隔函数{
控制台。日志结果:,添加4,5;
}, 4000; 因为你们不传递函数,你们运行函数,你们不能像这样
setInterval(checkprogress, 5000, '/editsongs');
如果函数本身是参数,则不能将参数传递到函数中。将你的函数包装在一个匿名函数的setInterval中。我不明白,这是因为它是一个异步ajax调用而不是一个同步调用,参数只是为了允许相同的javascript函数在不同的页面中使用,我只想让它每5秒检查一次进度,直到它得到一个重定向到的url。你没有向setInterval传递它期望的函数,而是传递undefined,因为你调用的是返回undefined的函数,而不是只向它传递一个函数,所以它什么都不做。嗯,我照你说的做了,现在根本不叫它了!我把结尾的花括号放错地方了,好的,谢谢