CoreyFrangがajaxリクエストをキューに入れるためにstackoverflowに投稿した便利なプラグインがあります。私の場合、ユーザーが感じる速度の低下を最小限に抑えるために、「チャンク」に大量のデータのコレクションをロードするのに役立ちます。ajaxリクエストのキューが完了する前にページ付けイベントがトリガーされた場合を除いて、これは完全に機能します。この場合、ロードされたオブジェクトを保持しているコンテナはクリアされますが、キューに入れられたリクエストは引き続き実行され、望ましくない動作が発生します。私が欲しいのは、既存のすべてのリクエストのキューをクリアする方法を見つけて学ぶことです。開発者はこれを行う方法を投稿しましたが、機能していないようです。jQueryサイトの.queueを読んでみましたが、これを機能させる方法がわかりません。私はすでにこの問題を理解しようと多くの時間を費やしてきましたが、しかし、おそらくjQueryのより複雑な側面のいくつかに精通していないことが、私を妨げています。jQueryに精通している誰かが助けてくれることを願っています:)(提案されたものにマークを付け、いくつかの「!!!!!」では機能しないようです)
/*
* jQuery.ajaxQueue - A queue for ajax requests
*
* (c) 2011 Corey Frang
* Dual licensed under the MIT and GPL licenses.
*
* Requires jQuery 1.5+
*/
(function($) {
// jQuery on an empty object, we are going to use this as our Queue
var ajaxQueue = $({});
$.ajaxQueue = function( ajaxOpts ) {
var jqXHR,
dfd = $.Deferred(),
promise = dfd.promise();
// queue our ajax request
ajaxQueue.queue( doRequest );
// add the abort method
promise.abort = function( statusText ) {
// proxy abort to the jqXHR if it is active
if ( jqXHR ) {
return jqXHR.abort( statusText );
}
// if there wasn't already a jqXHR we need to remove from queue
var queue = ajaxQueue.queue(),
index = $.inArray( doRequest, queue );
if ( index > -1 ) {
queue.splice( index, 1 );
}
// and then reject the deferred
dfd.rejectWith( ajaxOpts.context || ajaxOpts,
[ promise, statusText, "" ] );
return promise;
};
// run the actual query
function doRequest( next ) {
jqXHR = $.ajax( ajaxOpts )
.then( next, next )
.done( dfd.resolve )
.fail( dfd.reject );
}
return promise;
};
// !!!!!!!!!!!!!!!!!
// this is what the developer suggested on his website in the comments section
// ... but it does not appear to work
$.ajaxQueue.stop = function( clear ) { ajaxQueue.stop( clear ); }
})(jQuery);