1. ホーム
  2. jquery

[解決済み] AJAXリクエストを定期的に発生させるには?

2022-08-22 07:28:09

質問

<meta http-equiv="Refresh" Content="5">

このスクリプトは、5秒ごとにページを再読み込みまたは更新する。しかし、私はそれをjQueryとAJAXコールを使用して行いたいと思います。それは可能ですか?

どのように解決するのですか?

他の人が指摘しているように、setInterval と setTimeout はトリックを実行します。私は、Paul Irish によるこの素晴らしいビデオから学んだ、もう少し高度なテクニックを強調したいと思います。 http://paulirish.com/2010/10-things-i-learned-from-the-jquery-source/

繰り返しの間隔よりも長くかかる可能性のある定期的なタスク (低速回線での HTTP リクエストなど) では、 を使用しない方が良いでしょう。 setInterval() . 最初のリクエストが完了しないまま次のリクエストを開始すると、複数のリクエストが共有リソースを消費し、お互いを飢えさせるという事態に陥る可能性があります。最後のリクエストが完了するまで次のリクエストをスケジュールするのを待つことで、この問題を避けることができます。

// Use a named immediately-invoked function expression.
(function worker() {
  $.get('ajax/test.html', function(data) {
    // Now that we've completed the request schedule the next one.
    $('.result').html(data);
    setTimeout(worker, 5000);
  });
})();

単純化するために、私はスケジューリングに成功コールバックを使いました。この欠点は、1つのリクエストが失敗すると更新が止まってしまうことです。これを避けるために、代わりにcompleteコールバックを使用することができます。

(function worker() {
  $.ajax({
    url: 'ajax/test.html', 
    success: function(data) {
      $('.result').html(data);
    },
    complete: function() {
      // Schedule the next request when the current one's complete
      setTimeout(worker, 5000);
    }
  });
})();