AJAX readystatechange прослушиватель для IE7 + 8

(function (send) {

     XMLHttpRequest.prototype.send = function () {

         this.addEventListener('readystatechange', function() {

             console.log('readyState changed');

         }, false);

         send.apply(this, arguments);
     };

})(XMLHttpRequest.prototype.send);

Это работает, но, похоже, это влияет на другие структуры (например, jQuery). Когда я использую код выше, мои jQuery ajax calls doen't complete (IE7 + IE8).

Есть ли способ дать событию новый псевдоним, чтобы он не вызывал конфликтов (я просто предполагаю, что это проблема)?

И я не могу использовать this.onreadystatechange, поскольку jQuery перезаписывает его (см. Fiddle).

Как только я свяжу слушателя событий, код, кажется, терпит неудачу, поэтому я не могу использовать консоль для отладки.

Fiddle

Сравнить в режиме ie8 vs ie9 и заметить, что пустая консоль в ie8

Причина, по которой мне это нужно, это то, что я хочу глобальный обработчик ajax для другой структуры (GWT). Я использую jQuery только для его тестирования.

Изменить: Похоже, только ie9 поддерживает addEventListener. Тем не менее, attachEvent, похоже, не существует на объекте XHR в ie7-8.

Ответ 1

У нас была аналогичная проблема с ошибкой jquery в IE8. Я предполагаю, что вы делаете запрос на перекрестный домен. Jquery делает ajax через XMLHttpRequest, но IE8 заменил объект XMLHttpRequest на XDomainRequest, а люди jquery не поддерживают его. Поэтому для IE8 вам придется изменить код для использования XDomainRequest с jquery.

см. ссылки

Использование jquery ajax для IE8