0

を使用するプロジェクトに取り組んでいますsetInterval。少し読んだのですが、よくわかりません。何が起こるかというと、問題なく動作しますが、約 20 秒後に、PC が遅れるまでどんどん速くなり始めます。

var autorefresh = setInterval(function () {
    $('#holder').fadeOut('slow').load('index.php').fadeIn('slow');
}, 5000);

私が言ったように、これはうまくいきますが、徐々に速くなるまではうまくいきます。

4

1 に答える 1

7

あなたが何をしようとしているのかはわかりませんが、このコードが行うことは、あなたが言うように、管理不能になるまで、同時に実行される関数の数を増やすことです. リクエストに 5 秒以上かかる場合 (多くのページがフェッチされて高負荷が発生している場合に発生する可能性があります)、いつでも複数の読み込みが進行中であることになります。

編集: 質問者は、「5 秒ごとに div を更新」したいと考えています。

これが機能しない理由は、更新が瞬時に行われず、時間がかかるためです。しかし、ループはそれを尊重せず、読み込みにどれだけ時間がかかっても 5 秒ごとに更新されます。これは、どの時点でもネットワークが ajax リクエストと のいずれかで応答する可能性があることを意味し、一度fadeInに 2 つfadeInの が実行される可能性があります。

これを修正するために、別のリクエストの を設定する前に ajaxloadfadeInが完了するまで待ちます。timeOut

var refresh = function() {
    $('#holder').fadeOut('slow').load('index.php').fadeIn("slow",
        function(){setTimeout(refresh,5000)});
}
refresh();
于 2013-05-26T09:48:29.977 に答える