2013-07-20 73 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