我在Web应用程序中使用FileReader来读取用户选择的本地文件,并且当我readAsText()时,一旦完成,readyState应该更改为“ 2”。这是我的代码:
var fr = new FileReader(); // readyState is 0
var filetoload = $("#foo")[0].files[0];
fr.readAsText(filetoload); // readyState should be 2!!
var xml = fr.result;
localStorage.setItem('foo', xml);
现在在Firefox中,这一切都可以正常工作,并且xml可以很好地写入到localStorage中。如果我在控制台处于静止状态(假设在#foo输入中指定了文件)下执行此Chrome,那么它也可以正常工作。但是,如果我从.jsp文件中的script标记正常运行此代码,则上述第3行之后的readyState = 1(!)。而且,如果我在第3行放置一个断点,然后尝试从控制台读取readAsText(),那么它也会设置readyState = 1。
Chrome在执行过程中需要什么来完全读取文件?我究竟做错了什么?它仅在控制台处于静止状态时才能在Firefox和Chrome中工作,这一事实使我相信Chrome需要做更多的事情才能允许这种情况。感谢您的任何见解,谢谢。
最佳答案
我可以从this post找到答案。由于读取文件是异步发生的,因此我想我需要进行相应的处理。以下是对我有用的。 (jsonCall()只是一个内部函数,我们基本上会调用$ .ajax)我希望这对以后的人有所帮助。
$(document).ready(function(){
$('#foo').on('click', function(e){
readFile($("[name='filelocation']")[0].files[0], function(e) {
// use e.target.result in callback...
var data = { "xml" : e.target.result };
jsonCall("myservlet", data, function() {
window.open(url, "_blank", "height=800,width=1200");
})
});
});
});
function readFile(file, onLoadCallback)
{
var fr = new FileReader();
fr.onload = onLoadCallback;
fr.readAsText(file);
}
关于javascript - 在Chrome中加载文件时,FileReader readyState卡在1,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47023505/