Немного кроссбраузерности содранной с 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) {}
// ...
}
})