2010-07-16 51 views
11

¿Cómo verifico si la página tiene solicitudes AJAX o HTTP GET/POST pendientes? Uso javascript y/o python para esta comprobación.Verificar solicitudes AJAX pendientes o solicitud HTTP GET/POST

lo que quería hacer es ejecutar un script si una página ha terminado todas las solicitudes. onload no funciona para mí, si usa Firebugs net panel, lo sabría. onload se activa cuando se carga la página, pero existe la posibilidad de que todavía haya solicitudes pendientes en algún lugar.

gracias de antemano.

Respuesta

10

descubierto. gracias por el esfuerzo chicos. simplemente javascript.

interValRef = 0; 

interValRef = setInterval("checkState();",100) 

function checkState(){ 
    if(document.readyState == 'complete'){ 
     clearInterval(interValRef); 
     myFunc(); 
    } 
} 
+0

todo lo que quería era básicamente comprobar si la página se ha cargado por completo. no hay una solicitud http get/post ajax pendiente. el código de arriba hizo el truco. – klambiguit

+0

Estoy bastante seguro de que todavía puede haber solicitudes HTTP pendientes después de que readyState se haya "completado". El evento 'load' se corresponde con ese readyState y simplemente significa que la solicitud inicial ha cargado todas sus dependencias (a diferencia de no más solicitudes pendientes). Puedes ver esto en la pestaña de red de Chrome en una página como yahoo.com. La línea roja es el evento 'load' pero a menudo hay cosas pendientes después de eso. – user2859458

0

Debería realizar un seguimiento de cada XMLHttpRequest y supervisar si se completa o se ejecuta la devolución de llamada asincrónica.

+0

sugerencias sobre el pedido HTML GET/POST? esto sucedería si un IFRAME está en una página. – klambiguit

0

Suponiendo que está usando prototype.js se podía llevar la cuenta con un contador de toda su petición objetos

var ACTIVE_REQUESTS = 0; // GLOBAL 

ACTIVE_REQUESTS++ 
new Ajax.Request('/your/url', { 
    onSuccess: function(response) { 
    ACTIVE_REQUESTS--; 
    // Handle the response content... 
    } 
})); 

console.log("there are " + ACTIVE_REQUESTS + " open AJAX requests pending"); 
+0

estoy usando prototype.js .. voy a comprobar esto ... gracias .. :) – klambiguit

1

Creo que quieres saber si el HTML está completamente cargado. En este caso, puede usar el evento dom:loaded. Aquí hay un ejemplo de cómo usarlo con prototipo (pero tiene que haber una variante para otros marcos JS):

document.observe("dom:loaded", function() { 
    // do whatever you want to do 
}); 

Este evento se dispara en cuanto se carga el árbol DOM. Entonces, incluso antes de cargar todas las imágenes o datos externos (incluido el iframe).

3

Veo que menciona que está utilizando Prototype.js. Puede rastrear solicitudes activas con Prototype al marcar el valor Ajax.activeRequestCount. Puede verificar esto usando setTimeout o setInterval para asegurarse de que todas las solicitudes activadas en la carga de la página se hayan completado (si eso es lo que quiere hacer)

+0

este también es bueno, pero solo verifica la solicitud de AJAX. ¿Qué hay de http get/post requests? (sucede con un iframe) – klambiguit

0

Esta es la mejor manera de verificarlo.

var loadingDone = document.readyState=="complete" && jQuery.active === 0; 

Así que loadingDone será cierto, si se realizan llamadas Ajax. Si es falso, entonces puede agregar la espera.

0
document.addEventListener("readystatechange", function(event) { 
    if (document.readyState === "complete") { 
     console.log("complete"); 
    } 
}); 
Cuestiones relacionadas