2

我一直在使用 FileReader API 来读取本地文件并将它们提供给 Java 小程序,现在这已经奏效了。该文件被读取,小程序的行为就像它应该的那样。将文件内容(作为字符串)传递给小程序的函数目前在分配给阅读器的 onloadend() 事件的函数内部调用(我使用 onloadend() 代替 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 上测试过了,所以它不依赖于浏览器。有人能帮我吗?

4

1 回答 1

1

同步文件阅读器仅在 WebWorker 上下文中可用,因为阻塞工作线程不会导致 UI 冻结。无论如何,没有办法在回调之外查看内容,除非你使用:

<script type="application/javascript;version=1.7"></script>

仅适用于Firefox。它允许您使用yield关键字,该关键字可用于实现可用于以同步方式编写异步代码的纤程。

于 2012-12-03T14:57:16.610 回答