如何使用javascript try catch解决文件未找到错误

问题描述 投票:0回答:1

我正在尝试编写一些java脚本代码(如果文件存在)将其内容添加到网页中,如果它不存在则会检查下一个文件是否存在。我目前有它显示数据,如果文件存在,但抛出

GET http://localhost:8080/temp1.xml 404 (Not Found)
xmlhttp.onreadystatechange @ friends.html:56
XMLHttpRequest.send (async)
(anonymous) @ friends.html:95

如果该文件不存在。

我已经尝试添加我尝试捕捉不同的部分,但似乎没有一个似乎阻止错误发生。香港专业教育学院也一直试图找到一个关于如何处理未发现的错误的体面指南,但似乎找不到一个适用于我的情况。

这是我没有尝试的代码。

xmlhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
        JSObj = JSON.parse(this.responseText);
        console.log(JSObj.friends.length);
        for (i = 0; i < JSObj.friends.length; i++) {
            name = JSObj.friends[i].name;
            xhttp1.open("GET", "temp"+ i +".xml", true);
            xhttp1.send();
        };
    };
};

这是我尝试的代码

xmlhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
        JSObj = JSON.parse(this.responseText);
        console.log(JSObj.friends.length);
        for (i = 0; i < JSObj.friends.length; i++) {
            name = JSObj.friends[i].name;
            try{
                xhttp1.open("GET", "temp"+ i +".xml", true);
                xhttp1.send();
           }catch(err){
                console.log(err);
           };
        };
    };
};

我得到的输出是一个空白页,因为错误停止了我工作的代码的错误,这是输出上面的错误。我希望它会跳过该文件然后进入下一个文件。

javascript try-catch filenotfoundexception
1个回答
0
投票

这不是XMLHttpRequest的工作方式。感知差异,你正在处理运行该代码的调用以及你期望open()方法做什么。首先,您异步调用了未提及的URL。当这个过程返回时,它调用了onreadystatechange事件,该事件运行了你在问题中发布的代码。然后你期望open()方法以不同的方式运行并使用try / catch。看到不同 ?看到您已将async参数设置为true。所以你在另一个名为xmlhttp1的对象上打开一个全新的调用。通过第二次调用,您将创建另一个XMLHttpRequest请求,该请求应由另一个onreadystatechange方法处理以进行处理。

您可以在此处阅读有关使用XMLHttpRequest的更多信息:

https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest

或多或少是这样的:

没有检验过PSEUDO-CODE

xmlhttp1 = new XMLHttpRequest();
xmlhttp1.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
        // whatever you want to do with the call to   
        // xhttp1.open("GET", "temp"+ i +".xml", true);
    } 
}

xmlhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
        JSObj = JSON.parse(this.responseText);
        console.log(JSObj.friends.length);
        for (i = 0; i < JSObj.friends.length; i++) {
            name = JSObj.friends[i].name;
            xhttp1.open("GET", "temp"+ i +".xml", true);
            xhttp1.send();
        };
    };
};

请调整此代码。这只是为了说明我的意思,可能不会这样。

© www.soinside.com 2019 - 2024. All rights reserved.