JavaScript FileReader()和可能的返回或关闭问题
最后,我的第一个问题是关于stackoverflow。我可以向你保证,我已经找到了相关的答案,但没有一个适合我的问题。我现在正在学习JavaScript,有.NET和C++背景,但是我不能得到这段代码来做我所期望的。我在这里复制了许多版本中的一个,返回语句的位置可能有问题,但也许你可以帮我解决这个问题JavaScript FileReader()和可能的返回或关闭问题,javascript,filereader,Javascript,Filereader,最后,我的第一个问题是关于stackoverflow。我可以向你保证,我已经找到了相关的答案,但没有一个适合我的问题。我现在正在学习JavaScript,有.NET和C++背景,但是我不能得到这段代码来做我所期望的。我在这里复制了许多版本中的一个,返回语句的位置可能有问题,但也许你可以帮我解决这个问题 function readFile(file) { var reader =
function readFile(file) {
var reader = new FileReader();
reader.onload = readSuccess;
function readSuccess(evt) {
var text = evt.target.result;
return text;
};
reader.readAsText(file);
}
我在这里尝试的是通过type=“file”的标记输入来读取在HTML中访问的文件。
代码中的每一个部分都进行得很好。我使用Chrome控制台和Firebug将函数的返回捕获到控制台中的变量中,如:
var x = readFile(aFile);
我得到的是一条“未定义”的信息。
使用断点,我可以看到return语句中的文本内容,并且它已正确填充!但是文本没有返回!
我看到过一些相关的问题,但它们使用innerHTML和其他我不想在这里使用的技巧来解决这个问题,因为这个函数的结果应该被另一个JS函数使用,而不是更新DOM的任何部分
非常感谢您的时间。您将获得未定义的
,因为这是readFile(aFile)
返回的内容(即无)。与事件侦听器一样,获取事件数据有多种方法,回调就是其中之一。以下是您的代码,已修改为使用一个:
function readFile(file, cb) {
var reader = new FileReader();
reader.onload = readSuccess;
function readSuccess(evt) {
cb(evt.target.result)
};
reader.readAsText(file);
}
var x;
readFile(aFile, function (data) {
x = data;
});
我添加了函数作为readFile
的第二个参数,当读取文件并将数据传递到其中时,将调用该参数。所有变量赋值都要在回调函数中完成
至于实现类似结果的其他方法,还有和,但您可能应该首先了解JS异步基础知识。这是回调函数中的
return
语句,而不是readFile
中的return语句。你不能-它是异步的!非常感谢你。它起作用了。现在我决定寻找资源来理解这种编程。再次感谢。