我正在编写一个从网站/服务器获取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()处停止?

谢谢!

最佳答案

您可以为此使用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 );
    }
}

09-30 17:52
查看更多