Home > Программирование > jQuery: Отмена активных ajax запросов

jQuery: Отмена активных ajax запросов

October 27th, 2011 Leave a comment Go to comments

Иногда требуется отменить все активные XHR, либо какую-то часть из них. Для этой нужны я накидал плагин  для jQuery, которые автоматически добавляет все XHR в коллекцию с возможностью указать тег.

 

(function($) {
	$.xhrPool = {};
 
	$.xhrPool.abortAll = function() {
		$.each(this, function(pool, map) {
			$.each(map, function(idx, jqXHR) {
				jqXHR.abort();
				$.xhrPool[pool].splice(idx, 1);
			});
		});
	};
 
	$.xhrPool.abort = function(pool) {
		if (typeof this[pool] != "undefined") {
			$.each(this[pool], function(idx, jqXHR) {
				try {jqXHR.abort();} catch (e) {}
				$.xhrPool[pool].splice(idx, 1);
			});
		}
	};
 
	$.ajaxPrefilter(function(options, originalOptions, jqXHR) {
		var pool = options.xhrpool || "global";
 
		if ( ! $.xhrPool[pool]) {
			$.xhrPool[pool] = [];
		}
 
		$.xhrPool[pool].push(jqXHR);
	});
})(jQuery)

Тег указывается в вызове $.ajax() опцией xhrpool. Без указания этой опции все XHR будут добавляться в $.xhrPool.global. Также доступны 2 метода: $.xhrPool.abortAll() — останавливает все запросы и $.xhrPool.abort(“%pool%”) — останавливает запросы в коллекции с указанным тегом.

  1. December 2nd, 2011 at 14:58 | #1

    пишите больше об администрировании серверов, намного интереснее 🙂

    • raver119
      raver119
      December 2nd, 2011 at 15:00 | #2

      У всех – разные интересы. Кому-то интереснее про Javascript.

      В ближайшее время будет коротенькая статейка про ремонт XFS.

  2. сугроб
    July 5th, 2013 at 08:27 | #3

    у вас не отрабатывается случай, когда запрос выполнился успешно…

    в этом случае нужно чистить $.xhrPool[pool] вручную в $.ajax.success

  1. No trackbacks yet.