(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.
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.
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 –
@MehdiYeganeh jQuery ustawia go na '$ .noop' który w pustej funkcji. http://api.jquery.com/jQuery.noop/ – Johan
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 –