2014-11-09 52 views
0

我寫一個函數從網站/服務器抓取json文件,並將其與代碼保存在本地存儲中存在:阿賈克斯 - 檢查功能,如果網址之前發送的請求

function donators() { 
    var jsonURL = "http://mywebsite.com/donators.json"; 
    var xhr = new XMLHttpRequest(); 
    xhr.open("GET", jsonURL, true); 
    xhr.onreadystatechange = function() { 
     if (xhr.readyState == 4) { 
      localDataStore.set("fb_donators", xhr.responseText); 
     } 
    }; 
    xhr.send(); 
} 

上面的代碼工作完全沒有當JSON文件可以達到,但如果我的服務器出現故障,文件無法達到我的劇本在與xhr.send(線)停止與錯誤:

GET http://mywebsite.com/donators.json net::ERR_NAME_NOT_RESOLVED 

有沒有一種方法,我可以檢測在發送請求之前是否可以到達URL,以停止發送請求並允許我的腳本的其餘部分繼續運行,而不是在xhr.send()停止?

謝謝!

+1

該腳本不應停止。它應該只是有一個你可以檢測和處理的錯誤。而且,不,你不能在沒有請求的情況下檢查瀏覽器中是否存在URL,並查看你回來了什麼(成功的數據或錯誤)。 – jfriend00 2014-11-09 01:39:58

+0

啊,謝謝 - 在處理存儲在localStorage中的數據時出現另一個錯誤,因爲存儲了 – 2014-11-09 01:56:01

回答

3

您可以使用try塊。它仍然需要HTTP請求,但它會優雅地失敗,並且您可以以任何方式處理錯誤。

function donators() { 
    var jsonURL = "http://mywebsite.com/donators.json"; 
    var xhr = new XMLHttpRequest(); 
    xhr.open("GET", jsonURL, true); 
    xhr.onreadystatechange = function() { 
     if (xhr.readyState == 4) { 
      localDataStore.set("fb_donators", xhr.responseText); 
     } 
    }; 
    try { xhr.send(); } catch(err) { 
     alert('Error getting data: ' + err.message); 
    } 
} 
+0

謝謝!我能夠使用這個和jfriend00說解決我的問題。 – 2014-11-09 01:57:55