如何使用clearInterval()然后对DOM进行更改?

时间:2012-10-27 16:53:14

标签: jquery dom

我有这个代码,我遇到的问题是我想停止循环然后替换文本'完成!'来自带有“textnew”字符串的sms-loader.php脚本。问题是循环再次发生,因此div.checkstatus字段中的文本再次被调用的php脚本替换。

奇怪的是,我看到了日志消息,并且我又得到了一个新的(最终的)请求,尽管在我的脚本中排序是相反的(第一站然后替换text())。我需要了解为什么会这样。

$(document).ready(function() {
var interval = "";

$('.checkstatus').each(function(){
    var msgid = $(this).data('msg')
        $this = $(this),
        hid = $this.data('history'),
        textnew = '<a href="sms-dstatus.php?id='+msgid+'&sid=' +hid+ '&amp;keepThis=true&amp;TB_iframe=true&amp;height=430&amp;width=770" title="Delivery Status" class="thickbox"><img src="../template/icons/supermini/chart_curve.png" alt="status" width="16" height="16" /></a>';

    interval = setInterval(function() {
    $this.load('../pages/sms-loader.php?id='+msgid);

        // stop the loop
        if($this.text()=='Done!'){
            // stop it
            clearInterval(interval);
            console.log(textnew);
            $this.html(textnew); /// this line is the problem
        }

    }, 5000); // 5 secs

});
});

3 个答案:

答案 0 :(得分:0)

你必须在“间隔”之前放一个“var”,把它标记为本地..

答案 1 :(得分:0)

我按照“提示”来更好地查看$ .ajax函数,我确实有更好的控制权。

$(document).ready(function() {
var interval = "";

$('.checkstatus').each(function(){
    var msgid = $(this).data('msg')
        $this = $(this),
        that = $this,
        hid = $this.data('history'),
        refreshimg = '<img src="../template/icons/smalls/10.png"/>';
    var interval = setInterval(function() {
    //$this.load('../pages/sms-loader.php?id='+msgid);
    $.ajax({
            url: "../pages/sms-loader.php",
            type: "GET",
            data:{id:+msgid},
            success: function(data) {
                if($this.text()=='Done!'){
                clearInterval(interval);
                }else{
                $this.html(data);
                }
              }

    }).done(function(){
        if($this.text()=='Done!'){
        console.log(refreshimg);
        $this.empty().html(refreshimg).show();
        clearInterval(interval);
        }
    });

    }, 5000); // 5 secs

});
});

答案 2 :(得分:0)

AJAX是非同步的,因此在请求发出时,您的其他代码将会被触发......在返回的数据之前。我不是100%理解目标,但是关于如何使用AJAX成功回调的概述应该有帮助

$this.load('../pages/sms-loader.php?id='+msgid, function(){

   /* AJAX complete and new html exists, run code here for after load-*/
   /* I believe you want to run clearInterval here */
});

请参阅load()的参考文档:http://api.jquery.com/load/