2013-07-20 8 views
8

Ich versuche diesen Code, aber es gibt mir eine DOM-Ausnahme. Was ich will, bekommt eine echte/falsche "Antwort" von der Funktion mit Javascript.Überprüfen Sie, ob Cross-Domain-URL gibt 404 mit 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

habe ich diesen Code aus this SO beantworten, aber wie gesagt ich es nicht funktioniert ...

+2

Diese Methode funktioniert nicht mit derselben Herkunftsrichtlinie. Sie müssen eine serverseitige Komponente verwenden, um zu überprüfen, ob die URL vorhanden ist. Eine Option ist die Verwendung von YQL wie in dieser Antwort: http://stackoverflow.com/a/13041787/133198 – vsr

+0

@ vsr, vielen Dank für die Idee. Gibt es einen Client-seitigen Weg, dies zu tun? – Rikard

+1

Client-Seite ist nur möglich, wenn der Host der URL CORS (http://www.html5rocks.com/en/tutorials/cors/) unterstützt. Da viele Websites CORS nicht unterstützen, ist die clientseitige Lösung nicht narrensicher. – vsr

Antwort

0

Kreuz Domain gibt keinen Statuscode erhalten kann. Statuscode ist Teil des Inhalts, der vom Server empfangen wird, wenn der Server mit Ja oder Nein antwortet. Im Falle eines domänenübergreifenden Servers antworten Sie niemals auf eine Anfrage.

Der zweite Fehler im Code ist, dass Sie den Statuscode nicht direkt erfassen können, ohne Wartezeit oder Erfolgsereignis. return statement in function wartet nicht, bis der Server auf eine Ajax-Anfrage reagiert, Sie können sich also nicht darauf verlassen.

+0

http.open hat den async-Parameter, wenn es als 'false' festgelegt ist, wird send() erst am Ende der Antwort zurückgegeben. Es wird jedoch nicht empfohlen, im Hauptthread ausgeführt zu werden. – Valen

Verwandte Themen