0

これは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がエラーを返しました:

サービスは利用できません

このエラーを処理して、なんとかして非表示にする方法はありますか?

シャウトボックスの更新時にエラーが表示されないようにコードを編集しましたが、それでも毎分このエラーが表示されます。

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: waitここで、に目を向けてsuccess: waitstatus == 200ifステートメントを完全に削除することができます。もちろん、更新を再度実行たいが、何か別のことをしたい場合は、これがチャンスです。

また、リンクされたフィドルには、ダミーコードが含まれていることに注意してください。したがって、フィドルにあるものをコピー/ページングするだけではいけません。そうしないと、エラーが発生してまったく実行されなくなります。

編集:おっと、。でエラーが見つかりました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 に答える