在我的Html中,我有这个ajax函数,意味着每5秒调用一次来检查任务是否完成,并继续直到它有,然后重定向。
但它似乎只被召唤一次,它有什么问题
<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>
答案 0 :(得分:1)
该函数正在评估未定义。 改为使用匿名函数:
setInterval(function(){checkprogress('/editsongs')}, 5000);
setInterval(checkprogress('./ editsongs'),5000)不会使用该参数调用checkProgress,而是在调用setInterval后立即执行checkProgress,返回未定义的结果。所以基本上你的代码目前是:
checkprogress('/editsongs');
setInterval(undefined, 5000);
以此为例:
function add(a, b){
console.log("adding "+a+" and "+b);
return a+b;
}
console.log("result:", add(1,2));
//setInterval(add(1,2), 5000);
//is basically
//setInterval(3, 5000);
//therefore use an anonymous function:
setInterval(function(){
console.log("result:", add(4,5));
}, 4000);
答案 1 :(得分:0)
因为你没有通过功能你运行的功能看起来像这样
setInterval(checkprogress, 5000, '/editsongs');
答案 2 :(得分:-1)
您告诉setInterval
重复调用checkProgress(...)
的结果。
每次通过将调用包装在无参数函数内时,你需要告诉它调用 checkProgress
:
setInterval(() => { checkprogress('/editsongs') }, 5000);
如果箭头功能无法在您的浏览器中运行:
setInterval(function() { checkprogress('/editsongs') }, 5000);