2012-03-12 7 views
6

Sto utilizzando JQuery per recuperare informazioni da un URL e visualizzarlo sulla mia pagina in modo asincrono. L'URL proviene da un altro dominio, quindi utilizzo JSONP per ottenere i dati. Funziona benePosso verificare se l'URL è raggiungibile utilizzando AJAX + cross-domain + jsonp?

Tuttavia, quando l'URL remoto non è attivo (cosa che accade una volta ogni tanto) la mia pagina si blocca come JQuery AJAX non chiama le funzioni "successo" o "errore".

Sto usando JQuery 1.7.

mio codice è simile:

$.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); 
     } 
    }); 

Se "QualchePagina" è in su, poi vedo il messaggio "OK". Se "somePage" non è raggiungibile, allora non vedo nulla.

Qualsiasi idea su come ottenere la funzione "errore" viene richiamata? O ancora più importante, come rilevare se l'URL del dominio incrociato è raggiungibile?

È possibile?

Grazie,

+2

in qualche modo correlato: [supporto Rileva server/sito per XMLHttpRequests tra domini?] ** (http://stackoverflow.com/questions/9433949/detect-server-site-support-for-cross-domain-xmlhttprequests) ** – hippietrail

risposta

10

aggiungere 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

Grazie! Sono contento che sia stato così semplice. – jmend

+1

cosa è jsonp: "jsonp" indica? – suyash