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

时间:2018-03-22 19:52:06

标签: javascript html ajax

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

3 个答案:

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