如何通过ajax执行php脚本后停止setInterval

时间:2012-05-01 18:54:59

标签: php javascript ajax

我已经搜索过这个问题的答案,而我找不到它的原因可能只是因为我完全把我的剧本搞砸了,所以请任何能帮助我的人都非常感激。

我有一个javascript函数,它触发表单提交的onClick并运行对script1.php的ajax调用,然后用setInterval启动一个计时器。 setInterval正在调用另一个javascript函数来从script1.php轮询输出文件,这样我们就可以将新数据添加到屏幕上。这部分工作正常。

但是,我想在script1.php完成处理时停止计时器。我该怎么做呢?我已经尝试在script1.php中输入clearInterval(myTimer)作为它运行的最后一个语句,它似乎出现在浏览器中,但它并没有停止计时器。

<script type="text/javascript">

var myTimer;
var file1 = "script1.php";
var file2 = "script2.php";


function startTimer(myTimer) {
  myTimer = window.setInterval(loadData, 2000);
}

function stopTimer() {
  clearInterval(myTimer);
}

function startData()
{
ajaxRequest(file1,data);
startTimer(myTimer);

}


function loadData()
{
ajaxRequest(file2)
}


</script>


<form action="index.php" method="post">
<div style="text-align:left;width:300px;">
<textarea style="width:300px;height:200px;"> </textarea><BR>
<button type="button" onclick="startData()">get data</button>
</div>
</form>

<div id="myDiv" style="text-align:left;width:500px;border:solid 1px #ccc;padding:50px;">
please enter data above
</div>

3 个答案:

答案 0 :(得分:1)

您将myTimer作为参数传递给startTimer。这使myTimer成为startTimer的局部变量。因此,它不会更新全局myTimer

应该是:

function startTimer() {
  myTimer = setInterval(loadData, 2000);
}

function stopTimer() {
  clearInterval(myTimer);
}

然后,您只需致电startTimer()stopTimer()

答案 1 :(得分:1)

是的,你搞砸了。您应该让PHP直接将数据返回到执行AJAX调用的脚本。

在AJAX成功时,PHP脚本输出的任何文本都可用于成功回调。

如果你使用的是JQuery,那就简单了:

$.ajax({
   url: 'someurl',
   success: function(response) {
      // do whatever with response
   }
});

答案 2 :(得分:0)

当你开始你的间隔时,将它分配给任何可以访问的PULlically变量说“INTERVAL_ITEM”

当您的回复达到clearInterval(INTERVAL_ITEM);