Ajax-用于在发送请求之前检查url是否存在的函数

Ajax - Function to check if url exists before send request

本文关键字:url 检查 是否 存在 函数 用于 请求 Ajax-      更新时间:2023-09-26

我正在编写一个函数,从网站/服务器获取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);
        }
    };
    xhr.timeout = 5000;
    xhr.ontimeout = function() {
        alert( 'The operation timed out.' );
    }
    try { xhr.send(); } catch( err ) {
        alert( 'Error getting data: ' + err.message );
    }
}