【问题标题】:how to stop setInterval after php script is done executing through ajax通过ajax执行php脚本后如何停止setInterval
【发布时间】:2012-05-01 18:54:59
【问题描述】:

我已经搜索了这个问题的答案,但我没有找到它的原因可能是我从一开始就完全搞砸了我的脚本,所以请任何能帮助我的人都非常感激。

我有一个 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>

【问题讨论】:

    标签: php javascript ajax


    【解决方案1】:

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

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

    如果你使用的是 JQuery,它会很简单:

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

    【讨论】:

    • 由于某种原因,在我开始使用 setInterval 之前这不起作用,但我再次尝试,现在 ajax 工作正常。谢谢!
    • @ZekarKovacs 没问题。很高兴我能帮上忙。如果这回答了您的问题,您可能需要点击旁边的复选标记来接受答案。
    【解决方案2】:

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

    应该是:

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

    那你只需要打电话给startTimer()stopTimer()

    【讨论】:

      【解决方案3】:

      当您开始间隔时,将其分配给任何可公开访问的变量,例如“INTERVAL_ITEM”

      当您的响应达到 clearInterval(INTERVAL_ITEM);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-01-20
        • 2023-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-13
        • 1970-01-01
        • 2017-03-21
        相关资源
        最近更新 更多