2 Stimmen

Javascript - Wert existiert, verschwindet dann wieder und taucht erneut auf?

Dies bringt mich um den Verstand. Ich kann es nicht mit Firebug herausfinden. Kann mir bitte jemand erklären, was hier los ist?

Im Grunde habe ich eine eingehende Textdatei, in der jede Zeile einen durch Pipe getrennten Datensatz enthält. Ich teile diese in ein Array von Arrays von Strings auf, um sie später in einem Autocomplete-Textfeld verwenden zu können. Der Code lautet wie folgt:

$(function () {

    var rawData = new Array();
    $.get("/beispiel.txt",
        function (data) {
            var raw = data.split('\n');
            for (var i = 0; i < raw.length; i++) {
                rawData.push(raw[i].split('|'));
            };
            alert(rawData); // 1. Sanity-Check
        }
    );
    alert(rawData); // 2. Sanity-Check
    alert(rawData); // 3. Sanity-Check
</code></pre>

<p>Aus irgendeinem Grund funktioniert der erste Sanity-Check einwandfrei - er zeigt alle Daten an, wie ich es erwarten würde. Der zweite zeigt, dass rawData leer ist... aber der dritte zeigt wieder alle Daten. Wenn ich den ersten Sanity-Check entferne, beeinflusst das nicht den zweiten und dritten.</p>

<p>Wie ist das möglich? Warum ist das so? Das bringt mich zum Wahnsinn.</p></x-turndown>

5voto

jmbucknall Punkte 2051

Sie vergessen, dass die get() Funktion eine asynchrone Funktion ist. Der von Ihnen definierte Rückruf wird nur aufgerufen, wenn die Datei geladen ist. Im Wesentlichen platziert der JavaScript-Interpreter ihn in einer Warteschlange, damit die Aktion abgeschlossen werden kann, und ermöglicht dann die Ausführung des restlichen Codes.

Also wird Ihr alert im Rückruf anzeigen, dass die Datei geladen wurde. Die alerts außerhalb werden weit vor dem tatsächlichen Laden der Datei ausgeführt. Natürlich, je länger Sie persönlich warten, um den zweiten Alert abzulehnen, desto besser ist die Chance, dass der dritte Alert ausgeführt wird, wenn alle Daten geladen sind.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X