2013-07-20 46 views
8

我想这个代码,但它给了我一个DOM异常。我希望它能从使用纯Javascript的函数中得到真/假的“答案”。检查跨域URL是否给出404与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

我得到这个代码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

跨域不给任何状态代码。状态码是服务器响应“是”或“否”时从服务器接收的内容的一部分。如果跨域服务器从不回应请求。

代码中的第二个错误是无法在没有任何等待时间或成功事件的情况下直接捕获状态码。函数中的return语句不会等待服务器对ajax请求的响应,因此您不能依赖它。

+0

http.open具有异步参数,当它设置为'false'时,send()将不会返回,直到响应结束。但是并不建议在主线程中执行。 – Valen