Search code examples
javascriptajaxxmlhttprequest

How to check if HTTP requests are open in browser?


Is there an easy way to detect if an XMLHttpRequest is active in the browser window? Or how many are active? ie. Is there a way to detect if there are any AJAX calls active in my browser window?

Extension of question: Using javascript is there a way I can see if any XMLHttpRequests are open? Such as "window.XMLisActive()" or something like that?

Solution: Ended up writing a wrapper for XMLHttpRequest: gist here


Solution

  • There is not a way to detect an open connection from JS unless you write a wrapper for XmlHttpRequest (or monkey patch it) that keeps track of opened connections.

    Here's kidcapital's monkey patch, not sure if it's perfect, but it's a good start

      (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);
        }
      })();
    

    Note

    This does not handle fetch or websockets but you could do something similar in those cases.