Ich bin neu in JavaScript. Ich habe ein Beispiel gefunden, um lokale Dateien mit Javascript unter StackOverflow zu öffnen. Nach einigem googlen kann ich meine Chrome setzen, um das Lesen von lokalen Dateien zu erlauben, und ich kann dann dieses Beispiel ausführen. Ich möchte jedoch die Zeichenfolge allText
zurückgeben und später in meinem Skript verwenden. Aber die Zeichenfolge wird undefined
außerhalb readTextFile()
.Öffnen Sie lokale Dateien in JavaScript
Es gibt eine ähnliche Frage here. Es scheint, dass es etwas mit der asynchronen Funktion von AJAX
zu tun hat. Ich kann die Jargons im Moment kaum verstehen. Ich sehe nur nicht, warum in diesem Beitrag der dritte Parameter XMLHttpRequest.open()
auf true
gesetzt wird.
Wie auch immer, unten ist mein aktueller Code. Ich möchte allText
außerhalb Funktion readTextFile()
verwenden.
<!DOCTYPE html>
<html>
<script>
function readTextFile(file)
{
var allText;
var rawFile = new XMLHttpRequest();
rawFile.open("GET", file, false);
rawFile.onreadystatechange = function()
{
if(rawFile.readyState === 4)
{
if(rawFile.status === 200 || rawFile.status == 0)
{
var allText = rawFile.responseText;
alert(allText);
}
}
}
rawFile.send(null);
return allText; // this is the part that goes wrong I think
}
t = readTextFile("foo.file");
document.write(t) // print out "undeifned" instead of the correct answer
</script>
</html>
Mögliches Duplikat von [Wie gebe ich die Antwort von einem asynchronen Anruf zurück?] (Http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous- call) – Marty
Sie deklarieren 'allText' zweimal (das macht zwei Variablen mit demselben Namen, aber unterschiedlichen Bereich), entfernen Sie das zweite' var' Schlüsselwort vor Ihrer Variablen. Viel Glück mit JavaScript! –
@ SantiagoHernández Das ist Teil davon, aber es würde immer noch nicht die asynchrone Erfüllung Race-Bedingung zu lösen, und es wäre immer noch undefiniert, bis die XHR-Anfrage abgeschlossen ist. –