在需要迭代集合並對每個元素順序執行AJAX 請求的場景中,維持伺服器效能並避免瀏覽器卡頓可能具有挑戰性。以下是解決此問題的創新方法:
jQuery 1.5 :
利用$.ajaxQueue() 插件,該插件使用Deferred、queue() 和$ .ajax () 機制。此外掛程式管理 AJAX 請求佇列的創建,並提供在請求完成時解析的承諾。
(function($) { // Create an empty object as the AJAX request queue var ajaxQueue = $({}); $.ajaxQueue = function(ajaxOpts) { // Define the deferred object and its promise var dfd = $.Deferred(), promise = dfd.promise(); // Enqueue the AJAX request ajaxQueue.queue(doRequest); // Add an abort method to the promise promise.abort = function(statusText) { // Abort the request if active if (jqXHR) { return jqXHR.abort(statusText); } // Remove the request from the queue var queue = ajaxQueue.queue(), index = $.inArray(doRequest, queue); if (index > -1) { queue.splice(index, 1); } // Reject the deferred dfd.rejectWith(ajaxOpts.context || ajaxOpts, [promise, statusText, ""]); return promise; }; // Define the function to execute the request function doRequest(next) { jqXHR = $.ajax(ajaxOpts) .done(dfd.resolve) .fail(dfd.reject) .then(next, next); } return promise; }; })(jQuery);
jQuery 1.4:
如果使用 jQuery 1.4,您可以利用空物件上的動畫佇列為 AJAX 要求建立自訂「佇列」。
(function($) { // Create an empty object as the AJAX request queue var ajaxQueue = $({}); $.ajaxQueue = function(ajaxOpts) { // Hold the original complete function var oldComplete = ajaxOpts.complete; // Enqueue the AJAX request ajaxQueue.queue(function(next) { // Define a complete callback to proceed with the queue ajaxOpts.complete = function() { // Execute the original complete function, if present if (oldComplete) oldComplete.apply(this, arguments); next(); // Proceed to the next request }; // Execute the request $.ajax(ajaxOpts); }); }; })(jQuery);
用法範例:
透過這些技術,您可以對集合中的每個項目排序AJAX 請求,確保伺服器效能,同時避免瀏覽器鎖定。
以上是如何在 JQuery 中順序執行 AJAX 請求以獲得最佳效能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!