我一直在使用FileReader API來讀取本地文件並將它們提供給Java小程序,並且此功能目前已工作。該文件被讀取,該applet的行爲就像它應該的。將文件內容(作爲字符串)傳遞給applet的函數當前稱爲INSIDE函數,分配給Reader的onloadend()事件(爲了某些錯誤處理需要,我使用onloadend()而不是onload()。也許我可以用try/catch指令替換它,我會研究它)。現在我想將文件的內容傳遞給一個全局變量,以便用Javascript解析它。問題是,這似乎是不可能的,因爲:FileReader API:查看回調之外的內容
1)FileReader對象的.result成員在文件加載後是空的(這是有道理的,看看讀者本身是如何異步的); 2)如果我將.result成員複製到一個全局變量中,例如,如果我這樣做:
var my_string;
function load_callback()
{
//Do some stuff...
my_string = this.result;
}
...
my_reader = new FileReader();
my_reader.onloadend = load_callback;
my_reader.readAsText(my_file)
document.getElementById("empty_paragraph").innerHTML = my_string;
我得到一個大的漂亮undefined
結果(而這並沒有太大的意義,真的)。 我該怎麼辦?這是否有其他安全功能,使FileReader無法傳播其回調方法外的文件內容?在任何人提到它之前 - 是的,該文件已被用戶正確提交(正如我所說的,該頁面的其餘部分工作);是的,我已經檢查過名稱my_string
沒有任何重複;我已經在Chromium和Firefox上測試過了,所以它不依賴於瀏覽器。有人能幫我嗎?
然而,正如我所說,問題只是一個時間......一旦文件被讀取,我可以自由地訪問其內容(當然通過全局變量)。 – Okarin
@Okarin是的,因爲訪問變量是同步的。 FileReader是異步的,所以最初的讀取*不可能*沒有回調。這不是一項安全功能,而是一項功能,可讓您在同一個線程中執行I/O而不會阻塞。 – Esailija
是的,我非常理解。你上面的答案被刪除了,但其實質是這個東西有效 - 我只需要給它足夠的時間讓文件被實際讀取。我會嘗試找到一個更好的解決方法(只是等待將是一個可怕的解決方案,並依賴機器),但至少我知道 - 原則上 - 這不是不可能的。 – Okarin