2012-02-13 12 views
13

¿Hay una manera fácil de detectar si un XMLHttpRequest está activo en la ventana del navegador? ¿O cuántos están activos? es decir. ¿Hay alguna forma de detectar si hay llamadas AJAX activas en la ventana de mi navegador?¿Cómo comprobar si las solicitudes HTTP están abiertas en el navegador?

Extensión de la pregunta: Usando javascript ¿hay alguna manera de ver si alguna XMLHttpRequests está abierta? Tales como "window.XMLisActive()" o algo así?

Solución: terminó escribiendo un contenedor para XMLHttpRequest https://gist.github.com/1820380

+1

¿Qué quiere decir con activo? ¿Puedes ampliar la pregunta un poco más, por ejemplo, cómo intentas lograr esto, qué has intentado, etc.? – TheBoyan

Respuesta

22

no hay una manera de detectar una conexión abierta de JS menos que se escribe un contenedor para XmlHttpRequest (o mono parche) que realiza un seguimiento de las conexiones abiertas.

Aquí hay parche mono de kidcapital, no estoy seguro si es perfecto, pero es un buen comienzo

(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

terminaron escribiendo una esencia que se puede encontrar aquí https: // gist.github.com/1820380 – kidcapital

+1

@kidcapital: publiqué algo muy similar aquí, pero no me tomé el tiempo para terminarlo, así que lo eliminé. ¿Lo viste durante los 30 segundos que se publicó? Se ve casi exactamente como lo que tenía;) En cualquier caso, asegúrese de probar los errores de red, y 'abort()' se llama –

+0

jaja no lo vi. Sin embargo, los errores de red aún activarán el código de respuesta 4? verificará de nuevo en abort() – kidcapital

3

Puede utilizar FireBug para eso.

enter image description here

+4

preguntándome si puedo acceder a él en Javascript también. – kidcapital

+0

O cualquiera de los otros entornos de desarrollo de navegador. http://stackoverflow.com/questions/4445759/is-there-a-single-html5-javascript-and-css-debugger/4445828#4445828 –

1

Mediante el uso de jQuery, puede realizar un seguimiento si hay solicitudes abiertas con los controladores de eventos globales: .ajaxStart() y .ajaxComplete()

Una variable global establecida en ajaxStart y reset en ajaxComplete debería hacer el trabajo.

+0

Esto supone que estás usando jquery .ajax sin embargo. ¿Qué pasa si no tienes jQuery ibrary? – kidcapital

+2

Esto es lo que mencionó mi respuesta, si tiene un contenedor para 'XmlHttpRequest', es fácil de hacer (si su envoltorio lo admite). Si no tiene jQuery, puede comenzar a usarlo o escribir su propio contenedor. –

+0

El emparejamiento correcto es ajaxSend y ajaxComplete (verifique los documentos) –

Cuestiones relacionadas