2014-02-25 93 views
2

我用的是簡單的AJAX和使用谷歌的調試,然後發現該網址不存在...Javascript是否可以在Http Request之前檢查文件是否存在?

的代碼非常簡單:

var http; 

if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari 
    http=new XMLHttpRequest(); 
} else { 
    http=new ActiveXObject("Microsoft.XMLHTTP"); 
} 

try { 
    http.open("GET", 'http://'+ip+':5000/test.html', true); 
    http.onreadystatechange = onRcvData; 
    if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari 
    http.send(null); 
    } else {// code for IE6, IE5 
    http.send(); 
    } 
} catch(e) { 
    http.abort(); 
} 

function onRcvData() { 
    if (http.readyState==4) { 
    if (http.status==404) { 

    } else if(http.status==200) { 

    } else { 

    } 
    } 
} 

這沒關係,如果該文件存在的test.html。 當文件是不存在的,錯誤顯示的部分:

if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari 
    http.send(null); 
} else { // code for IE6, IE5 
    http.send(); 
} 

所以,即使我用的onreadystatechange方法不能阻止錯誤...

該文件是在directoy旁我的網頁。

那麼我應該怎麼做才能與httprequest結合?

任何建議感激。

地址:

我已經使用方法 '頭',但它返回404 ...(無論jQuery插件/ JavaScript)的

像圖片: enter image description here

應該是什麼我呢...

錯誤的方向我發現有誤導?

+0

你從本地硬盤,嘗試了上面的例子或者是頁面託管在服務器上並通過http協議運行。 如果示例是從file:///協議運行的,那麼您將不會準備好狀態爲4 – kcak11

+0

它在Linux服務器中,謝謝。 – Shuinvy

回答

1

嘗試該功能

function urlExists(testUrl) { 
    var http = jQuery.ajax({ 
     type:"HEAD", //Not get 
     url: testUrl, 
     async: false 
    }) 
    return http.status!=404; 
} 


//Usage 
if(!urlExists('http://www.mysite.com/somefileOrImage.ext')) { 
    alert('File not found'); 
} 

HEAD

HEAD方法是相同,除了以獲得服務器不能 返回消息正文中的響應。 HTTP頭中包含 的元信息響應於HEAD請求應該與響應GET請求發送的信息相同 。此方法可用於獲取有關 請求所暗示的實體的元信息,而無需傳輸實體主體本身。此方法是 經常用於測試超文本鏈接的有效性,可訪問性, 和最近的修改。

閱讀here

+0

'async:false',Firefox版本30.0及更高版本中的同步操作以及近期/當前版本的Chrome由於不利的用戶體驗而被棄用。嘗試使用會導致失敗/錯誤。應該使用具有回調函數的'async:true'來進行異步操作。 –

2

您可以使用此功能

function UrlExists(url) 
{ 
    if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari 
     var http=new XMLHttpRequest(); 
    } 
    else { 
     var http=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    http.open('HEAD', url, false); 
    http.send(); 
    return http.status!=404; 
} 

Reference

+2

我已經使用這個解決方案,但我會建議在try-catch之間加入「http.send()」來檢查url是否不存在(我使用了一個文件,當文件不在作爲參數傳遞的目錄中那麼我得到了一個javascript錯誤) –

+0

'async:false',在Firefox版本30.0和更高版本中進行同步操作,並且由於不利的用戶體驗,在近期/當前版本的Chrome中被棄用。嘗試使用會導致失敗/錯誤。應該使用具有回調函數的'async:true'來進行異步操作。 –

相關問題