我是JavaScript新手。我找到了一個使用javascript在StackOverflow上打開本地文件的示例。在Google搜索之後,我可以將我的Chrome設置爲允許讀取本地文件,然後我就可以運行該示例。但是,我想返回字符串allText
,稍後在我的腳本中使用它。但字符串在readTextFile()
之外變成undefined
。在JavaScript中打開本地文件
還有一個類似的問題here。這似乎與AJAX
的異步功能有關。我現在幾乎無法理解這些行話。我只是不明白爲什麼在這篇文章中XMLHttpRequest.open()
的第三個參數設置爲true
。
無論如何,下面是我目前的代碼。我想使用allText
外部函數readTextFile()
。
<!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>
可能的重複[如何返回來自異步調用的響應?](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-調用) – Marty
你聲明'allText'兩次(使兩個變量具有相同的名稱但不同的範圍),刪除變量之前的第二個'var'關鍵字。祝你好運! –
@SantiagoHernández這是它的一部分,但它仍然不能解決異步履行競爭條件,並且在XHR請求完成之前它仍然是未定義的。 –