Javascript 为什么这个ajax调用只运行一次

Javascript 为什么这个ajax调用只运行一次,javascript,html,ajax,Javascript,Html,Ajax,在我的Html中,我有一个ajax函数,它意味着每5秒调用一次,检查任务是否完成,并继续执行直到完成,然后重定向 但似乎只有一次,有什么不对 <script> /** Check Progress */ function checkprogress(routepath) { var xhr = new XMLHttpRequest(); xhr.on

在我的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>

函数的计算结果为未定义。 改用匿名函数:

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的函数,而不是只向它传递一个函数,所以它什么都不做。嗯,我照你说的做了,现在根本不叫它了!我把结尾的花括号放错地方了,好的,谢谢