Ajax只运行一次

时间:2015-10-27 01:44:31

标签: javascript php jquery ajax

我有一个ajax函数,我希望它运行1912次,但由于某种原因它只运行一次。我使用startAt和stopAt来确定它何时应该停止运行,但由于某些原因它无法正常工作。我究竟做错了什么?

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script type = "text/javascript"> 
function callAjax(gotoUrl, link, startAt, stopAt, output) {

  $.ajax({
    type: "POST",
    url: gotoUrl,
    data: { link : link },
    error: function(xhr,status,error){
      alert("error");
    },
    success:function(data) {
      document.getElementById(output).innerHTML += startAt;
    },
    complete:function(data) {
      startAt++;
      var link = data; 
      if (startAt < stopAt) {
        setTimeout(function(){ 
            callAjax(gotoUrl, link, startAt, stopAt, output) 
        }, 100);
      }
    }
  });

} //end of function callAjax()  
</script>

<body onload = 'callAjax("test1.php", "link", 1, 1912, "output")'>
<div id = "output"></div>

结果:

1

预期结果:

1912

1 个答案:

答案 0 :(得分:2)

问题出在这一行:

var link = data; 

您正在重新分配link的值作为返回的数据。

然后在超时内立即调用它:

callAjax(gotoUrl, link, startAt, stopAt, output)

但是link不再是一个对象的链接,因此jquery错误输出,并且在一次迭代后静默地死亡。

删除该行使代码功能正常,您只需将数据存储在另一个变量中即可。

Here's a fiddle with the functional code with just that line commented out.