如何在使用XMLHttpRequest Javascript对象加载JSON文件之前验证它是否存在?

时间:2016-07-21 20:54:49

标签: javascript json xmlhttprequest

我正在将一个JSON文件从相对本地路径加载到我的基于Web的应用程序中。为此,我使用XMLHttpRequest对象,如下所示:

var xobj = new XMLHttpRequest();
xobj.overrideMimeType("application/json");
xobj.open('GET', 'myFyle.json', true);
xobj.onreadystatechange = function () {
    if (xobj.readyState == 4 && xobj.status == "200") {
        callback(JSON.parse(xobj.responseText));
    }
}
xobj.send(null);

我的问题是,当找不到myFyle.json时,我无法管理浏览器错误(net :: ERR_FILE_NOT_FOUND)。我希望在发生这种情况时加载标准.json文件(例如myStandardFile.json)。

有人有想法这样做吗?

提前致谢!

佩德罗。

1 个答案:

答案 0 :(得分:0)

您可以使用function load(file, callback) { var defaultFile = "myStandardFile.json"; var xobj = new XMLHttpRequest(); xobj.overrideMimeType("application/json"); xobj.open('GET', file, true); xobj.onreadystatechange = function() { if (xobj.readyState !== 4) return true; if (xobj.status === 200) { callback(JSON.parse(xobj.responseText)); //File not found. //The second condition just to prevent endless calls //in case if your default file doesn't exist } else if (xobj.status === 404 && file !== defaultFile) { load(defaultFile, callback); } } xobj.send(null); } load("myFyle.json", function(data) { console.log(data); }) 来检测未找到的文件'。

  

网站托管服务器通常会生成" 404 Not Found"   用户尝试关注损坏或死链接时的网页;

如果是404,您可以加载默认文件,如下所示:

function load(file, callback) {
	var defaultFile = "https://httpbin.org/user-agent";
    var xobj = new XMLHttpRequest();
    xobj.overrideMimeType("application/json");
    xobj.open('GET', file, true);
    xobj.onreadystatechange = function() {
        if (xobj.readyState !== 4) return true;
        if (xobj.status === 200) {
            callback(JSON.parse(xobj.responseText));
            //File not found
        } else if (xobj.status === 404 && file !== defaultFile) {
            load(defaultFile, callback);
        }
    }
    xobj.send(null);
}

load("https://httpbin.org/inexistentFile.json", function(data) {
	console.log(data);
})

演示:



<div ng-repeat="(num, obj) in questions">
   Number: {{num}} 
   Category 1: {{obj.category1}}
</div> 
&#13;
&#13;
&#13;

我希望这会对你有所帮助。