Показать сообщение отдельно
  #6 (permalink)  
Старый 22.05.2009, 00:27
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Немного кроссбраузерности содранной с Microsoft AJAX Framework. Уж они сами-то точно знают, как не допустить утечек памяти в их нем же браузере.

Request: Class.create({
	initialize: function(url, options) {
		// ...
		this.initialized = true;
	},

	handleStateChange: function() {
		if (this.xhr.readyState < 4 || this.responseAvailable) return;// это также полезно и для Opera8 для которой это событие при this.xhr.readyState == 4 может срабатывать дважды. Из-за этой строки ответ будет обработан только один раз
		this.responseAvailable = true;
		// ...
	},

	complete: function() {
		if (this.completed) return this;
		this.completed = true;
		try {
			this.xhr.onreadystatechange = Function.blank;// здесь у них добавляется не null, а пустая функция
			this.responseAvailable || this.initialized && this.xhr.abort();// т. е. метод abort вызывается только если запрос уже послан (this.initialized == true) но ответ еще не получен (this.responseAvailable == false)
		} catch (err) {}
		// ...
	}
})

Последний раз редактировалось Riim, 22.05.2009 в 00:57.
Ответить с цитированием