2012-03-12 11 views
6

Estoy usando JQuery para obtener información de una URL y mostrarla en mi página de forma asincrónica. La URL proviene de otro dominio, entonces uso JSONP para obtener los datos. Eso funciona bien¿Puedo probar si la URL es accesible usando AJAX + cross-domain + jsonp?

Sin embargo, cuando la URL remota está inactiva (lo que ocurre de vez en cuando) mi página se cuelga porque JQuery AJAX no llama a las funciones 'éxito' o 'error'.

Estoy usando JQuery 1.7.

Mi código es el siguiente:

$.ajax({ 
     type : "GET", 
     url : "http://otherdomain.com/somePage.html", 
     data : params, 
     dataType : "jsonp", 
     jsonp : "jsonp", 

     success : function (response, textS, xhr) { 
      alert("ok"); 
     }, 
     error : function (xmlHttpRequest, textStatus, errorThrown) { 
      alert("not ok " + errorThrown); 
     } 
    }); 

Si "CiertaPágina" se ha terminado, a continuación, aparece el mensaje "OK". Si "somePage" no es alcanzable, entonces no veo nada.

¿Alguna idea sobre cómo puedo obtener la función de "error" se llama? O más importante, ¿cómo detectar si la URL de dominio cruzado es alcanzable?

¿Eso es posible?

Gracias,

+2

Poco relacionado: [Detectar el soporte de servidor/sitio para XMLHttpRequests entre dominios?] ** (http://stackoverflow.com/questions/9433949/detectar-server-site-support-for-cross-domain-xmlhttprequests) ** – hippietrail

Respuesta

10

añaden un timeout

$.ajax({ 
     type : "GET", 
     url : "http://otherdomain.com/somePage.html", 
     data : params, 
     timeout:3000, 
     dataType : "jsonp", 
     jsonp : "jsonp", 

     success : function (response, textS, xhr) { 
      alert("ok"); 
     }, 
     error : function (xmlHttpRequest, textStatus, errorThrown) { 
      alert("not ok " + errorThrown); 
      if(textStatus==='timeout') 
       alert("request timed out"); 
     } 
    }); 

DEMO

+0

¡Gracias! Me alegra que fuera tan simple. – jmend

+1

¿Qué es jsonp: "jsonp" indicar? – suyash

Cuestiones relacionadas