複数の同時リクエストを防ぐ独自のプラグインを作成するのは非常に簡単です。以下は、AJAX 呼び出しをインターセプトし、未処理のリクエストのリストを保持し、新しいリクエストが着信したときにそれらを中止する単純なプラグインです。
$.fn.preventConcurrentAjax = function() {
return this.ajaxSend(function(e, jqXHR, settings) {
$.each($(this).data("pca-pending") || [], function() { this.abort(); });
$(this).data("pca-pending", [jqXHR]);
});
};
これを簡単に拡張して、リクエストがキューに入れられたときではなく、リクエストが完了したときにまだ未解決の以前のリクエストをキャンセルすることができます。これを行うには、各リクエストでタイムスタンプも保存する必要があります。
jQuery の.ajaxStart()
and.ajaxStop()
を使用して、「読み込み中」クラスの切り替えを自明に自動化することもできます。次に例を示します。
$.fn.loadingOnAjax = function() {
var $self = $(this);
return this.ajaxStart(function() { $self.addClass("loading"); })
.ajaxStop(function() { $self.removeClass("loading"); });
};