2012-02-13 9 views
13

Czy istnieje prosty sposób na wykrycie, czy XMLHttpRequest jest aktywny w oknie przeglądarki? A ilu jest aktywnych? to znaczy. Czy istnieje sposób wykrywania, czy w moim oknie przeglądarki są aktywne wywołania AJAX?Jak sprawdzić, czy żądania HTTP są otwarte w przeglądarce?

Rozszerzenie pytania: Używanie javascript jest sposób, który widzę, czy jakiekolwiek XMLHttpRequests są otwarte? Takich jak "window.XMLisActive()" czy coś w tym stylu?

Rozwiązanie: Skończyło się pisanie otoki dla XMLHttpRequest https://gist.github.com/1820380

+1

Co masz na myśli przez aktywne? Czy możesz bardziej rozwinąć pytanie, np. Jak próbujesz to osiągnąć, czego próbowałeś itp.? – TheBoyan

Odpowiedz

22

Nie ma sposobu, aby wykryć otwarte połączenie z JS chyba napisać otoki dla XmlHttpRequest (lub małpy załatać go), który śledzi połączeń otwartych.

Oto małpa łata kidcapital, a nie wiem, czy to jest doskonały, ale to dobry początek

(function() { 
    var oldOpen = XMLHttpRequest.prototype.open; 
    window.openHTTPs = 0; 
    XMLHttpRequest.prototype.open = function(method, url, async, user, pass) { 
     window.openHTTPs++; 
     this.addEventListener("readystatechange", function() { 
      if(this.readyState == 4) { 
      window.openHTTPs--; 
      } 
     }, false); 
     oldOpen.call(this, method, url, async, user, pass); 
    } 
    })(); 
+1

skończyło się na napisaniu sedna, który można znaleźć tutaj https: // gist.github.com/1820380 – kidcapital

+1

@kidcapital: Wysłałem tutaj coś bardzo podobnego, ale nie potrzebowałem czasu, aby to ukończyć, więc usunąłem go. Czy patrzyłeś na to przez 30 sekund, kiedy zostało wysłane? Wygląda prawie dokładnie tak, jak ja;) W każdym razie, upewnij się, że testujesz błędy sieciowe, a 'abort()' jest nazywane –

+0

haha, którego nie widziałem. błędy sieci nadal będą wywoływać kod odpowiedzi 4? sprawdzi dwukrotnie abort() – kidcapital

3

Można użyć FireBug do tego.

enter image description here

+4

zastanawiasz się, czy mogę uzyskać do niego dostęp w JavaScript. – kidcapital

+0

Lub dowolne inne środowisko programistyczne przeglądarki. http://stackoverflow.com/questions/4445759/is-there-a-single-html5-javascript-and-css-debugger/4445828#4445828 –

1

Korzystając jQuery można śledzić, czy są otwarte wnioski z obsługi zdarzeń globalnych: .ajaxStart() i .ajaxComplete()

Zmienna globalna ustawiona na ajaxStart i zresetować na ajaxComplete powinna wykonać zadanie.

+0

Zakłada to, że używasz jquery .ajax. Co jeśli nie masz jQuery ibrary? – kidcapital

+2

Oto moja odpowiedź, jeśli masz opakowanie dla 'XmlHttpRequest', to jest łatwe do zrobienia (jeśli twój wrapper je obsługuje). Jeśli nie masz jQuery, możesz zacząć go używać lub napisać własne opakowanie. –

+0

Prawidłowe parowanie to ajaxSend i ajaxComplete (sprawdź dokumentację) –

Powiązane problemy