2011-03-07 12 views
10

¿Cuál es la forma más rápida de verificar si mi servidor está en línea a través de JavaScript?Javascript: ¿Verificar si el servidor está en línea?

He intentado lo siguiente AJAX:

function isonline() { 
    var uri = 'MYURL' 
    var xhr = new XMLHttpRequest(); 
    xhr.open("GET",uri,false); 
    xhr.send(null); 
    if(xhr.status == 200) { 
     //is online 
     return xhr.responseText; 
    } 
    else { 
     //is offline 
     return null; 
    } 
} 

El problema es que nunca devuelve si el servidor no está en línea. ¿Cómo puedo establecer un tiempo de espera para que, si no vuelve después de una cierta cantidad de tiempo, pueda suponer que está desconectado?

Respuesta

23

XMLHttpRequest no funciona entre dominios. En su lugar, me cargo un pequeño <img> que espera volver rápida y ver el evento onload:

function checkServerStatus() 
{ 
    setServerStatus("unknown"); 
    var img = document.body.appendChild(document.createElement("img")); 
    img.onload = function() 
    { 
     setServerStatus("online"); 
    }; 
    img.onerror = function() 
    { 
     setServerStatus("offline"); 
    }; 
    img.src = "http://myserver.com/ping.gif"; 
} 

Editar: La limpieza de mi respuesta. Una solución XMLHttpRequest es posible en el mismo dominio, pero si solo quiere probar para ver si el servidor está en línea, la solución de carga img es la más simple. No hay necesidad de meterse con tiempos de espera. Si desea hacer que el código como si fuera síncrono, aquí hay un poco de azúcar sintáctica para usted:

function ifServerOnline(ifOnline, ifOffline) 
{ 
    var img = document.body.appendChild(document.createElement("img")); 
    img.onload = function() 
    { 
     ifOnline && ifOnline.constructor == Function && ifOnline(); 
    }; 
    img.onerror = function() 
    { 
     ifOffline && ifOffline.constructor == Function && ifOffline(); 
    }; 
    img.src = "http://myserver.com/ping.gif";   
} 

ifServerOnline(function() 
{ 
    // server online code here 
}, 
function() 
{ 
    // server offline code here 
}); 
+1

Bien encontrado, pero si recuerdo correctamente, tienes que anexarlo al DOM, porque no todos los navegadores lo cargarán si no lo haces. EDITAR: Es posible que desee usar 'onerror' porque esto se ejecutará cuando la imagen no exista: http://jsfiddle.net/8ZP9r/ – pimvdb

+0

@pimvdb - ¡Bien! Buena llamada con la sugerencia 'onerror'! Actualizaré mi respuesta. – gilly3

+0

Su sugerencia de AJAX no parece estar funcionando. Aún se cuelga sin conexión. – Skizit

0

Utilice un XMLHttpRequest, luego verifique si falló. Sin embargo, no estoy seguro si esto funcionaría entre dominios.

1

Haga una llamada ajax y su resultado lo dirá.

+0

lo probé, no funciona: http://stackoverflow.com/questions/36007060/show-waiting- page-while-server-reboots – Black

Cuestiones relacionadas