我一直在使用 FileReader API 来读取本地文件并将它们提供给 Java applet,目前这已经奏效了。文件被读取,applet 的行为就像它应该的那样。将文件内容(作为字符串)传递给小程序的函数目前在分配给阅读器的 onloadend() 事件的函数内部调用(我使用 onloadend() insteat 而不是 onload() 用于某些错误处理需要。虽然也许我可以用 try/catch 指令替换它,我会研究它)。现在我想将文件的内容传递给一个全局变量,以便也用 Javascript 解析它。问题是这似乎是不可能的,因为:
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 上测试过了,所以它不依赖于浏览器。有人可以帮助我吗?
最佳答案
同步文件读取器仅在 WebWorker 上下文中可用,因为阻塞工作线程不会导致 UI 卡住。无论如何,无法在回调之外查看内容,除非您使用:
<script type="application/javascript;version=1.7"></script>
这只适用于 firefox。它允许您使用 yield
关键字,可用于实现 fibers可用于以同步方式编写异步代码。
关于javascript - 文件读取器 API : viewing the contents outside of a callback,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13685409/