0

我有这段代码,我遇到的问题是我想停止循环,然后替换文本“完成!” 它来自带有“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

});
});
4

3 回答 3

0

您必须在“interval”之前放置一个“var”,以将其标记为本地..

于 2012-10-27T16:58:31.753 回答
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

});
});
于 2012-10-27T18:19:36.397 回答
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/

于 2012-10-27T18:20:48.563 回答