Come verificare se le richieste HTTP sono aperte nel browser?

C’è un modo semplice per rilevare se un oggetto XMLHttpRequest è attivo nella finestra del browser? O quanti sono attivi? ie. C’è un modo per rilevare se ci sono chiamate AJAX attivo nella mia finestra del browser?

Estensione della domanda: Utilizzando javascript c’è un modo posso vedere se XMLHttpRequests sono aperti? Come “finestra.XMLisActive()” o qualcosa di simile?

Soluzione: Finito per scrivere un wrapper per XMLHttpRequest https://gist.github.com/1820380

  • Cosa significa per te la attivo? Si può espandere la domanda un po ‘ di più, come sta cercando di fare questo, cosa hai provato etc.?
InformationsquelleAutor kidcapital | 2012-02-13

 

3 Replies
  1. 28

    Non c’è un modo per rilevare una connessione aperta da JS a meno che non si scrivere un wrapper per XmlHttpRequest (o scimmia patch) che tiene traccia di tutte le connessioni aperte.

    Ecco kidcapital la scimmia di patch, non so se è perfetto, ma è un buon inizio

      (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);
        }
      })();
    • finito per scrivere un gist, che può essere trovato qui gist.github.com/1820380
    • Ho postato qualcosa di molto simile qui, ma non prendere il tempo per finirlo, così l’ho rimosso. Ti guardi per i 30 secondi che è stato postato? Sembra quasi esattamente come quello che ho avuto 😉 In ogni caso, essere sicuri di prova per gli errori di rete, e abort() di essere chiamato
    • haha io non l’ho visto. gli errori di rete sarà ancora attivare la risposta 4 se? sarà un doppio controllo su abort()
    • dopo l’iniezione di questo script nel browser per i test di selenium la mia applicazione ha smesso di funzionare. questo blocco la mia domanda chiamate.
    • Provato l’iniezione di questo codice con un setInterval chiamata che registra la variabile ogni secondo, ha funzionato senza problemi. Quindi non dovrebbe rovinare qualsiasi applicazione. Se lo fa, uno sviluppatore che abbia familiarità con js debug deve fare doppio controllare… 🙂 Ci sarà il test di questo approccio per prove di automazione per essere in grado di sapere se non ajax-richiesta viene aperto al momento, o per il notificante in merito se tutte le richieste, abbiamo finito…
    • Si noti che questa è una vecchia questione, e probabilmente anche la necessità di gestire fetch()
    • che è corretto, tuttavia la nostra App utilizza un Vaadin Versione che si basa al 100% su XHR Richieste, tanto che per il caso d’uso è ok…

  2. 1

    Utilizzando jQuery, è possibile tenere traccia se non ci sono richieste aperta con l’evento globale gestori: .ajaxStart() e .ajaxComplete()

    Una variabile globale impostata su ajaxStart e reset ajaxComplete dovrebbe fare il lavoro.

    • Questo presuppone che si sta utilizzando jquery .l’ajax però. Che cosa se non avete jQuery biblioteca?
    • Questo è ciò che la mia risposta l’ho già detto, se si dispone di un wrapper per XmlHttpRequest, è facile da fare (se il wrapper supporta). Se non si dispone di jQuery, è possibile iniziare ad usarlo, o scrivere un wrapper.
    • L’abbinamento corretto è ajaxSend e ajaxComplete (controllare la documentazione)

Lascia un commento