Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 防止JQuery加载时出现错误503_Javascript_Jquery_Error Handling - Fatal编程技术网

Javascript 防止JQuery加载时出现错误503

Javascript 防止JQuery加载时出现错误503,javascript,jquery,error-handling,Javascript,Jquery,Error Handling,这是我在shoutbox更新中的代码: function updateShoutbox(){ $("#shoutdiv").load("shoutbox.php", { 'action': 'update' } , function (responseText, textStatus, req) { if (textStatus == "error") { return false;

这是我在shoutbox更新中的代码:

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);
它会在几分钟内返回每个错误:

shoutbox.php返回错误:

服务不可用

是否有任何方法来处理此错误并以某种方式隐藏它

我编辑了我的代码,以便在shoutbox update上停止显示任何错误,但它仍会每分钟显示一次此错误。

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

function (responseText, textStatus, req) {
  if(req.status!=200&&req.status!=302) {
    return false;
  }
  //update the shoutbox
}
至少对我来说,这似乎是防止随机错误通过检查的最可靠方法。

如果要“隐藏”错误而不是首先查找错误原因,请在$中的回调函数中尝试此方法。加载:

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

至少在我看来,这是防止随机错误通过检查的最可靠的方法。

好的,让我们举个例子:

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

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

如果您查看控制台,您将看到它倒计时,直到
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);
            }
        }

    })();
});​

好的,那么我们上面的内容应该主要模拟您在问题中的代码。您会注意到,我在那里有
complete:wait
部分,并且
setTimeout()
在该回调中。和。。仅当返回的
状态为
200
(成功)时才会调用它

现在,您可以将
complete:wait
转换为
success:wait
,并取出
status==200
if语句。当然,如果您确实想再次运行更新,但可能会做一些不同的事情,这是您的机会

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


编辑:哎呀,发现
url=
有一个错误。修复。

好的,让我们举个例子:

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

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

如果您查看控制台,您将看到它倒计时,直到
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);
            }
        }

    })();
});​

好的,那么我们上面的内容应该主要模拟您在问题中的代码。您会注意到,我在那里有
complete:wait
部分,并且
setTimeout()
在该回调中。和。。仅当返回的
状态为
200
(成功)时才会调用它

现在,您可以将
complete:wait
转换为
success:wait
,并取出
status==200
if语句。当然,如果您确实想再次运行更新,但可能会做一些不同的事情,这是您的机会

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



编辑:哎呀,发现
url=
有一个错误。已修复。

与其执行
setInterval()
,不如从
$.load()
的回调处理程序中重新运行
UpdateShoubbox()
?@JaredFarrish您认为这是问题所在吗?您使用的是什么?谷歌搜索它会发现一些问题。如果你可以访问shoutbox.php代码,你能从那里提供相关的代码吗?@PatrickRoberts并询问如何隐藏这个随机的javascript错误,而不是执行
setInterval()
,为什么不重新运行
updateshoubbox()
从您的
$.load()
?@JaredFarrish的回调处理程序中,您认为这就是问题所在吗?您使用的是什么shoutbox?谷歌搜索它会发现一些。如果你能访问shoutbox.php代码,你能从那里提供相关的代码吗?@PatrickRoberts,并询问如何隐藏这个随机的javascript错误。事实上,这是很棒的代码,内置的
success
选项似乎正是MacTaylor需要的,但有一个问题。页面加载时,shoutbox不会立即更新,而是在页面加载60秒后更新。当然,这是一个快速解决办法,但我想我应该指出这一点;还有,那是6秒。谢谢你指出。哈哈,6秒钟,我的错。“既然你已经指出了这一点,那可能没什么大不了的,但哦,好吧,”帕特里克·罗伯茨说,“有几件事不对。不过,我现在有了小提琴的工作版本。我不得不颠倒我原来的
wait()
update()
函数顺序。真想不到!现在我想起来了,反正你也不需要更新302了,真是太棒了!实际上,这是很棒的代码,内置的
success
选项似乎正是MacTaylor所需要的,但有一个问题。页面加载时,shoutbox不会立即更新,而是在页面加载60秒后更新。当然,这是一个快速解决办法,但我想我应该指出这一点;还有,那是6秒。谢谢你指出。哈哈,6秒钟,我的错。“既然你已经指出了这一点,那可能没什么大不了的,但哦,好吧,”帕特里克·罗伯茨说,“有几件事不对。不过,我现在有了小提琴的工作版本。我不得不颠倒我原来的
wait()
update()
函数顺序。真想不到!现在我想起来了,反正你也不需要更新302了,真是太棒了!正如我所说,您必须提供PHP来消除错误本身。另一个答案只会阻止它干扰