При итерации по коллекции и выполнении отдельных вызовов Ajax для каждого элемента важно контролировать последовательность, чтобы предотвратить перегрузка сервера и зависание браузера. Хотя можно использовать собственные итераторы, существуют и более элегантные решения.
В jQuery 1.5 и выше плагин $.ajaxQueue() использует $. .Deferred, $.queue() и $.ajax() для управления последовательностью запросов и предоставления обещания, которое выполняется после завершения запроса.
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 очередь анимации можно использовать для создания собственной «очереди». Вы также можете создать свой собственный плагин $.ajaxQueue(), который использует очередь jQuery 'fx' для автоматического инициирования первого запроса в очереди, если он еще не запущен.
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 выполняется последовательно, что позволяет корректно обрабатывать нагрузку на сервер и поддерживать отзывчивость браузера. .
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3