Chciałbym wiedzieć, czy możliwe jest „podpięcie” się do każdego pojedynczego żądania AJAX (w momencie, gdy ma zostać wysłane lub w przypadku zdarzeń) i wykonać akcję. W tym momencie zakładam, że na stronie znajdują się inne skrypty innych firm. Niektóre z nich mogą używać jQuery, a inne nie. czy to możliwe?
javascript
ajax
xmlhttprequest
Yuliy
źródło
źródło
fetch()
interfejsu API w nowoczesnych przeglądarkach.Odpowiedzi:
Zainspirowany odpowiedzią Aviva , przeprowadziłem małe dochodzenie i oto, co wymyśliłem.
Nie jestem pewien, czy to wszystko jest tak przydatne, jak w komentarzach w skrypcie i oczywiście będzie działać tylko w przeglądarkach używających natywnego obiektu XMLHttpRequest .
Myślę, że zadziała, jeśli biblioteki javascript są używane, ponieważ będą używać obiektu natywnego, jeśli to możliwe.
źródło
UWAGA: Zaakceptowana odpowiedź nie daje rzeczywistej odpowiedzi, ponieważ jest wywoływana zbyt wcześnie.
Możesz to zrobić, co generalnie przechwyci wszystkie AJAX na całym świecie i nie zepsuje żadnych wywołań zwrotnych itp., Które mogą zostać przypisane przez biblioteki AJAX stron trzecich.
Więcej dokumentów na temat tego, co możesz tutaj zrobić za pomocą interfejsu API addEventListener:
https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest#Monitoring_progress
(Uwaga: to nie działa <= IE8)
źródło
this.status
status serwera w tym przypadku,200
jeśli żądanie jest OK, 404 jeśli element nie został znaleziony, 500 itd. Ale kod działa idealnie."load"
Zdarzenie jest wywoływane tylko w przypadku sukcesu. Jeśli nie zależy Ci na wyniku (tylko że kwerenda się zakończyła) możesz skorzystać z"loadend"
wydarzeniaSkoro wspomniałeś jQuery, wiem jQuery oferuje
.ajaxSetup()
sposób, który wyznacza globalne opcje AJAX, które zawierają wyzwalacze zdarzeń takich jaksuccess
,error
ibeforeSend
- co jest, co brzmi jak co szukasz.oczywiście będziesz musiał zweryfikować dostępność jQuery na każdej stronie, na której próbujesz użyć tego rozwiązania.
źródło
Jest na to pewien podstęp.
Przed uruchomieniem wszystkich skryptów weź oryginalny obiekt XHMHttpReuqest i zapisz go w innym var. Następnie nadpisz oryginalny XMLHttpRequest i przekieruj wszystkie wywołania do niego za pośrednictwem własnego obiektu.
Kod pseudo:
źródło
Znalazłem dobrą bibliotekę na Githubie, która dobrze wykonuje swoją pracę, musisz ją dołączyć przed innymi plikami js
https://github.com/jpillora/xhook
oto przykład, który dodaje nagłówek http do każdej przychodzącej odpowiedzi
źródło
Korzystając z odpowiedzi „meouw” proponuję skorzystać z następującego rozwiązania, jeśli chcesz zobaczyć wyniki zapytania
źródło
jquery ...
źródło
Oprócz odpowiedzi meouw musiałem wstrzyknąć kod do elementu iframe, który przechwytuje wywołania XHR i użyłem powyższej odpowiedzi. Jednak musiałem się zmienić
Do:
I musiałem się zmienić
Do:
Było to konieczne, aby działał w IE9 z trybem dokumentów IE8 . Jeśli ta modyfikacja nie została dokonana, niektóre wywołania zwrotne generowane przez strukturę komponentów (Visual WebGUI) nie działały. Więcej informacji pod tymi linkami:
Bez tych modyfikacji ogłaszanie zwrotne AJAX nie zakończyło się.
źródło