2013-07-20 18 views
8

Sto provando questo codice ma mi dà un'eccezione DOM. Quello che voglio che ottenga una "risposta" vero/falso dalla funzione usando Javascript semplice.Controlla se l'url tra domini dà 404 con javascript

var url = 'http://www.google.com/'; 
function UrlExists(url) 
{ 
    var http = new XMLHttpRequest(); 
    http.open('HEAD', url, false); 
    http.send(); 
    return http.status!=404; 
} 
UrlExists(url); 

FIDDLE

ho ottenuto questo codice da this SO rispondere, ma come detto non riesco a farlo funzionare ...

+2

Questo metodo non funzionerà coz della stessa politica di origine. Dovrai utilizzare un componente lato server per verificare se l'URL esiste. Un'opzione sta usando YQL come in questa risposta: http://stackoverflow.com/a/13041787/133198 – vsr

+0

@vsr, grazie per l'idea. C'è un modo lato client per fare questo? – Rikard

+1

Il lato client è possibile solo quando l'host di 'url' supporta CORS (http://www.html5rocks.com/en/tutorials/cors/). Poiché molti siti non supportano CORS, la soluzione lato client non è infallibile. – vsr

risposta

0

interdominio non dà alcun codice di stato. il codice di stato è parte del contenuto che viene ricevuto dal server quando il server risponde con sì o no. In caso di server interdominio, non rispondere mai alla richiesta.

il secondo errore nel codice è che non è possibile acquisire il codice di stato direttamente senza alcun tempo di attesa o evento di successo. l'istruzione return in function non attende la risposta del server alla richiesta ajax, quindi non puoi dipendere da essa.

+0

http.open ha il parametro async, quando è impostato come 'false', send() non ritorna fino alla fine della risposta. Tuttavia non è consigliato l'esecuzione nel thread principale. – Valen