как решить файл не найден ошибка с Java-скриптом попробуйте поймать - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь написать некоторый код java-скрипта, который (если файл существует) добавит его содержимое на веб-страницу, если он не существует, то он проверит, существует ли следующий файл. У меня в настоящее время есть отображение данных, если файл существует, однако выдает

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

если файл не существует.

Я уже пытался добавить, я пытаюсь поймать разные части, но ни одна из них, кажется, не останавливает возникновение ошибки. Я также пытался найти достойное руководство о том, как обрабатывать не найденные ошибки, но, похоже, не могу найти то, которое будет работать в моем случае.

это код, который я имею без исключений try.

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();
        };
    };
};

это код, который у меня есть с try-исключениями

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);
           };
        };
    };
};

вывод, который я получаю, является пустой страницей из-за ошибки, из-за которой код, с которым я работаю, не работает, когда выводится вышеуказанная ошибка. Я ожидаю, что он просто пропустит этот файл и перейдет к следующему.

1 Ответ

0 голосов
/ 11 апреля 2019

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

Более или менее так:

НЕ ИСПЫТАННЫЙ ПСЕВДО-КОД

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();
        };
    };
};

Пожалуйста, измените этот код.Это просто для иллюстрации того, что я имею в виду и, вероятно, не будет работать таким образом.

...