11
(function (send) { 

    XMLHttpRequest.prototype.send = function() { 

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

      console.log('readyState changed'); 

     }, false); 

     send.apply(this, arguments); 
    }; 

})(XMLHttpRequest.prototype.send); 

Działa to, ale wydaje się, że ma wpływ na inne frameworki (jak jQuery). Kiedy używam powyższego kodu, moje wywołania jQuery ajax nie są kompletne (IE7 + IE8).AJAX readystatechange listener dla IE7 + 8

Czy istnieje sposób nadania temu zdarzeniu nowego aliasu, aby nie powodował konfliktów (po prostu zakładam, że to jest problem)?

I nie mogę użyć this.onreadystatechange, ponieważ jQuery go nadpisuje (patrz Fiddle).

Zaraz po powiązaniu detektora zdarzeń kod wydaje się działać bezgłośnie, więc nie mogę użyć konsoli do debugowania.

Fiddle

Compare in ie8 vs ie9 mode and notice that the console is empty in ie8

Powodem dlaczego muszę to, że chcę globalnej obsługi AJAX dla innego ram (GWT). Używam jQuery tylko do testowania go teraz.

Edycja: Wygląda tak, jak tylko ie9 obsługuje addEventListener. Jednak wydaje się, że attachEvent istnieje na obiekcie XHR w ie7-8.

+0

I'm ślepy przepraszam za tę odpowiedź staram się znaleźć problem, nie wiem dlaczego? ... Po wymianie XMLHttpRequest.send i jesteś ostatnią osobą, która zmieni onreadystatechange i nikt nie może tego zmienić po tobie .. !! ale jak wyjaśniłeś nie działa ... Zmieniam onload i jego true & works .. i sprawdzam źródło jquery, jquery nie nadpisuje onreadystatechange i tylko nadpisuję onload & onerror z XHR –

+0

@MehdiYeganeh jQuery ustawia go na '$ .noop' ​​który w pustej funkcji. http://api.jquery.com/jQuery.noop/ – Johan

+0

yep znalazłem wiersz i znaleziono problem, problem jest, gdy wysyłasz żądanie przez jquery, sprawdzić limit czasu i ustawić onreadystatechange na noop (jquery.basis.js, linia 5240): setTimeout (function() { // Sprawdź czy żądanie jest nadal dzieje if (! XHR && requestDone) { onreadystatechange ("timeout"); } } s.timeout); & jeśli ustawisz timeout na 0, problem zostanie rozwiązany w jquery: D –

Odpowiedz

1

Mamy podobny problem z błędem jquery na IE8. Zakładam, że wysyłasz zapytanie między domenami. Jquery robi ajax przez XMLHttpRequest, ale IE8 zastąpił obiekt XMLHttpRequest za pomocą XDomainRequest, a jquery ludzie nie obsługują go. W przypadku IE8, będziesz musiał zmodyfikować kod, aby użyć XDomainRequest z jquery.

zobaczyć linki

Using jquery ajax for IE8

+0

Dzięki, ale jQuery powinna poradzić sobie z tym wewnętrznie teraz. Ponadto "XMLHttpRequest" jest obsługiwane aż do IE7. – Johan

+1

Ponadto, jak wspomniałem powyżej; Nie szukam rozwiązania jQuery. Używam GWT. Właśnie użyłem jQuery dla celów demonstation. – Johan

+0

jquery nie obsłuży go wewnętrznie. Nie planują obsługi IE8, zobacz ten raport o błędzie -> http://bugs.jquery.com/ticket/8283 – cherit