在没有事件侦听器的情况下使用readAsBinaryString()

时间:2013-05-31 07:22:53

标签: javascript fileapi

您好我正在使用javascript上的File API创建我的第一个项目,这是一个简单的程序,它将文件作为输入并在Div上显示它的内部代码。 我想知道是否有办法让这段代码在没有事件监听器和事件处理程序的情况下工作。 我认为这是主要问题,但我无法弄清楚它是如何工作的:

document.getElementById('byte_content').textContent = reader.readAsBinaryString(blob);

所有mi代码都在这里:

<!DOCTYPE html>
<head>
<html>
<script>
function convert(){
var files = document.getElementById('input').files;
file = files[0];
var reader = new FileReader();
var blob = file.slice(0,20);
    document.getElementById('byte_content').textContent = reader.readAsBinaryString(blob);
}
</script>
</head>
<body>

<input type="file" id="input" name="file" />

<button onclick=convert()>Run script</button>

<div id="byte_range"></div>

</body>

我见过几个例子this one,但所有例子都使用类似的代码:

 event.target.result

1 个答案:

答案 0 :(得分:1)

你做不到。 FileReader以异步方式读取文件 。这意味着阅读在后台发生,并在未来某个未指定的点完成;它不会立即返回结果。检索结果的唯一方法是在事件完成时监听事件并执行您要执行的代码然后。这根本不是问题,只需要在readAsBinaryString调用后将代码放在回调/事件处理函数中,而不是在程序上。

而不是:

document.getElementById('byte_content').textContent = reader.readAsBinaryString(blob);
你这样做:

reader.onload = function (event) {
    document.getElementById('byte_content').textContent = event.target.result;
};
reader.readAsBinaryString(blob);

这就是它的全部内容。