0

这是我在喊话箱更新上的代码:

function updateShoutbox(){
    $("#shoutdiv").load("shoutbox.php", { 'action': 'update' } , 
    function (responseText, textStatus, req) {
        if (textStatus == "error") {
          return false;
        }
    });
}

        
$(document).ready(function(){
updateShoutbox();
var auto_refresh = setInterval(
function ()
{
updateShoutbox();
$("#shoutdiv").scrollTop($("#shoutdiv")[0].scrollHeight);
}, 6000);

它每隔几分钟返回错误:

喊话框.php 返回错误:

暂停服务

有没有办法处理这个错误并以某种方式隐藏它?

我编辑了我的代码,以便停止在喊话框更新时显示任何错误,但它仍然每分钟显示此错误。

4

2 回答 2

2

好的,让我们以这个为例:

$(document).ready(function(){
    (function iterate(i) {
        if (!!i) {
            console.log('iteration #', i--);

            setTimeout(function next(){
                iterate(i);
            }, 1000);
        }
    })(10);
});​

http://jsfiddle.net/userdude/6C8yp/

如果您查看控制台,您会看到它倒计时,直到i等于0,或者i没有给出(这!!就是那里的意思)。我在这里做的是每秒循环一次,但只有在最后一个循环完成之后。我正在喂我的循环。

看看你在这里有什么,我可能会这样做:

$(document).ready(function($){
    var $shoutbox = $("#shoutdiv"),
        timer;

    (function update(){
        var opts = {
            url: 'shoutbox.php',
            action: 'update',
            complete: wait
        };

        $.ajax(opts);

        function wait(res, status, req){
            if (status == 200) {
                $shoutbox
                    .append(res)
                    .scrollTop($shoutbox[0].scrollHeight);

                timer = setTimeout(update, 6000);
            }
        }

    })();
});​

http://jsfiddle.net/userdude/whsPn/

http://jsfiddle.net/userdude/whsPn/1/

好的,所以我们上面的内容应该主要模拟您在问题中的代码。你会注意到我complete: wait在里面有这个部分,并且setTimeout()在那个回调中。而且..只有在status返回200(成功)时才会调用它。

现在,您可以转到complete: waitsuccess: waitstatus == 200完全删除 if 语句。当然,如果您确实想再次运行更新,但可能会做一些不同的事情,这是您的机会。

另请注意,在链接的小提琴中,我有一些虚拟代码。因此,不要只是复制/分页小提琴中的内容,否则您会遇到错误并且根本无法运行。

编辑:糟糕,发现url =. 固定的。

于 2012-12-15T09:33:40.857 回答
1

如果您想“隐藏”您的错误,而不是首先查找错误原因,请在 $.load 中的回调函数中尝试此操作:

function (responseText, textStatus, req) {
  if(req.status!=200&&req.status!=302) {
    return false;
  }
  //update the shoutbox
}

至少对我来说,这似乎是防止随机错误通过您的检查的最可靠方法。

于 2012-12-15T09:24:45.267 回答