2012-05-01 89 views
2

我已经搜索了这个答案,我没有找到它的原因可能只是我从getgo完全搞砸了我的脚本,所以请任何人谁可以帮助我非常感谢它。如何在php脚本完成通过ajax执行后停止setInterval

我有一个JavaScript函数,它触发onClick提交表单并运行ajax调用script1.php,然后用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> 

回答

1

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

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

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

由于某种原因,在我转移到使用setInterval之前,这不起作用,但我再次尝试,现在ajax工作正常。谢谢! – zoltar

+0

@ZekarKovacs没问题。很高兴我能帮上忙。如果这回答你的问题,你可能想通过点击旁边的复选标记来接受答案。 – dqhendricks

1

你传递myTimer作为参数传递给startTimer。这使得myTimerstartTimer的局部变量。因此它不更新全球myTimer

它应该是:

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

function stopTimer() { 
    clearInterval(myTimer); 
} 

然后你只需要调用startTimer()stopTimer()

0

,当你开始你的时间间隔将其分配到任何公开访问的变量说“INTERVAL_ITEM”

,当你的反应实现clearInterval:

如果你使用JQuery,因为这将是一样简单(INTERVAL_ITEM);