2013-07-20 1 views
8

이 코드를 시도하고 있지만 DOM 예외가 발생했습니다. 내가 진정한 자바 스크립트를 사용하여 함수에서 참/거짓 "응답"을 얻고 싶습니다. 크로스 도메인 URL이 자바 스크립트로 404를 제공하는지 확인하십시오.

FIDDLE

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); 

나는 this SO 답변에서이 코드를 얻었으나로 내가 그것을

+2

이 방법은 동일한 출처 정책에 따라 작동하지 않습니다. URL이 있는지 확인하려면 서버 측 구성 요소를 사용해야합니다. 한 가지 옵션은이 답변에서와 같이 YQL을 사용하고 있습니다. http://stackoverflow.com/a/13041787/133198 – vsr

+0

@vsr, 아이디어에 감사드립니다. 이 작업을 수행 할 클라이언트 쪽 방법이 있습니까? – Rikard

+1

클라이언트 측은 'url'의 호스트가 CORS (http://www.html5rocks.com/en/tutorials/cors/)를 지원하는 경우에만 가능합니다. 많은 사이트가 CORS를 지원하지 않기 때문에 클라이언트 측 솔루션은 속임수가 아닙니다. – vsr

답변

0

크로스 도메인은 어떤 상태 코드를 제공하지 않습니다 ... 작업을 얻을 수있다. 상태 코드는 서버가 yes 또는 no로 응답 할 때 서버로부터 수신되는 컨텐트의 일부입니다. 교차 도메인 서버의 경우 요청에 응답하지 마십시오.

코드의 두 번째 실수는 대기 시간이나 성공 이벤트없이 상태 코드를 직접 캡처 할 수 없다는 것입니다. 함수에서 return 문은 Ajax 요청에 대한 서버 응답까지 기다리지 않으므로 의존 할 수 없습니다.

+0

http.open에는 async 매개 변수가 있습니다. false로 설정하면 send()가 응답이 끝날 때까지 반환되지 않습니다. 그러나 그것은 주 스레드에서 실행되도록 제안되지 않았습니다. – Valen

관련 문제