Создание меню параметров на основе текстового файла?

Я пытаюсь автоматически создать меню параметров (используя HTML и JavaScript) на основе содержимого текстового файла. Я хотел бы, чтобы каждая опция в меню была строкой в ​​текстовом документе.

Вот JavaScript:

function get_parameters() {
    alert("get_parameters() called"); // these alerts are just to tell me if that section of the code runs
    var freader = new FileReader();

    var text = "start";
    freader.onload = function(e) {
        text = freader.result;
        alert('file has been read');
    }

    freader.onerror = function(e) {
        alert('freader encountered an error')
    }

    freader.readAsText('./test.txt', "ISO-8859-1");

    var div = document.getElementById('bottom_pane_options');
    div.innerHTML = div.innerHTML + text;
}

С помощью этого кода все, что я пытаюсь сделать, это прочитать файл и распечатать на div "bottom_pane_options", но я не могу найти причину, почему это не работает. Если мой путь не самый эффективный, не могли бы вы дать мне код, который будет работать?

Благодарю.

--РЕДАКТИРОВАТЬ--

Вот HTML

<!DOCTYPE html>
<html>
    <head>
    <title>Culminating</title>
    <link href="style.css" rel="stylesheet" type="text/css">

    <script
        src="http://maps.googleapis.com/maps/api/js?key=AIzaSyCJnj2nWoM86eU8Bq2G4lSNz3udIkZT4YY&sensor=false">
    </script>

    <script>
        // Calling the Google Maps API
    </script>
</head>

<body>
    <div class="content">
        <div id="googleMap"></div>
        <div id="right_pane_results">hi</div>
        <div id="bottom_pane_options">
            <button onclick="get_parameters()">Try It</button>
        </div>
    </div>
</body>
<script type="text/javascript" src="./javascript.js"></script>
</html>

2 ответа

Поскольку файл еще не был прочитан при запуске div.innerHTML = div.innerHTML + text;,

Вот почему есть обратные вызовы.

См. https://developer.mozilla.org/en-US/docs/Web/API/FileReader:

Объект FileReader позволяет веб-приложениям асинхронно читать содержимое файлов [...]

Используйте это вместо:

freader.onload = function(e) {
    text = freader.result;

    var div = document.getElementById('bottom_pane_options');
    div.innerHTML = div.innerHTML + text;
    alert('file has been read');
}

freader.onerror = function(e) {
    alert('freader encountered an error')
}

freader.readAsText('./test.txt', "ISO-8859-1");

Вам нужно установить <div> текст в обратном вызове вместо сразу после начала загрузки:

freader.onload = function(e) {
   text = freader.result;

   /*************
    ** TO HERE **
    ************/

   alert('file has been read');
}

/* MOVE THIS */
var div = document.getElementById('bottom_pane_options');
div.innerHTML = div.innerHTML + text;
/*************/
Другие вопросы по тегам