「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 最適な制御のために Ajax リクエストを順序付けるにはどうすればよいですか?

最適な制御のために Ajax リクエストを順序付けるにはどうすればよいですか?

2024 年 11 月 3 日に公開
ブラウズ:887

How to Sequence Ajax Requests for Optimal Control?

Ajax リクエストのシーケンス

コレクションを反復処理して要素ごとに個別の Ajax 呼び出しを行う場合、次のような事態を防ぐためにシーケンスを制御することが重要です。サーバーの過負荷とブラウザのフリーズ。カスタム反復子を使用することもできますが、より洗練されたソリューションも利用できます。

jQuery 1.5

jQuery 1.5 以降では、$.ajaxQueue() プラグインは $ を利用します。 .Deferred、$.queue()、および $.ajax() は、リクエストのシーケンスを管理し、リクエストの完了時に解決される Promise を提供します。

実装:

var jqXHR,
    dfd = $.Deferred(),
    promise = dfd.promise();

ajaxQueue.queue( doRequest );

promise.abort = function( statusText ) {
  if ( jqXHR ) {
    return jqXHR.abort( statusText );
  }
  var queue = ajaxQueue.queue(),
      index = $.inArray( doRequest, queue );
  if ( index > -1 ) {
    queue.splice( index, 1 );
  }
  dfd.rejectWith( ajaxOpts.context || ajaxOpts,
    [ promise, statusText, "" ] );
  return promise;
};

function doRequest( next ) {
  jqXHR = $.ajax( ajaxOpts )
    .done( dfd.resolve )
    .fail( dfd.reject )
    .then( next, next );
}

return promise;

};

})(jQuery);

jQuery 1.4

jQuery 1.4 では、アニメーション キューをカスタムの「キュー」の作成に利用できます。 jQuery の「fx」キューを使用して、キュー内の最初のリクエストがまだ実行されていない場合に自動的に開始する独自の $.ajaxQueue() プラグインを作成することもできます。

実装:

var oldComplete = ajaxOpts.complete;

ajaxQueue.queue(function(next) {
  ajaxOpts.complete = function() {
    if (oldComplete) oldComplete.apply(this, arguments);
    next();
  };
  $.ajax(ajaxOpts);
});

};

})(jQuery);

例:

url: '/echo/html/',
data: {html : "[" idx "] " $(this).html()},
type: 'POST',
success: function(data) {
  $("#output").append($("<li>", { html: data }));
}

});
});

これにより、各 Ajax リクエストが順番に実行されるようになり、サーバーの負荷を適切に処理し、ブラウザの応答性を維持できるようになります。 .

リリースステートメント この記事は次の場所に転載されています: 1729396281 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3