Javascript 在Chrome中加载文件时,FileReader readyState卡在1
我正在web应用程序中使用FileReader读取用户选择的本地文件,当我读取文本()时,readyState应在完成后更改为“2”。以下是我的代码:Javascript 在Chrome中加载文件时,FileReader readyState卡在1,javascript,google-chrome,filereader,Javascript,Google Chrome,Filereader,我正在web应用程序中使用FileReader读取用户选择的本地文件,当我读取文本()时,readyState应在完成后更改为“2”。以下是我的代码: var fr = new FileReader(); // readyState is 0 var filetoload = $("#foo")[0].files[0]; fr.readAsText(filetoload); // readyState should be 2!! v
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可以很好地写入本地存储。如果我在控制台中以静止状态(假设在#foo输入中指定了一个文件)执行此Chrome,那么它也可以工作。但是,如果我正常地从.jsp文件中的script标记运行它,则在上面第3行后面的readyState=1(!)。而且,如果我在第3行上放置一个断点,然后尝试从控制台读取ASTEXT(),它也会设置readyState=1
Chrome在执行过程中完全读取文件需要什么?我做错了什么?它在Firefox和Chrome中只能在控制台的静止状态下工作,这一事实让我相信Chrome需要更多的东西来实现这一点。非常感谢您提供的任何见解。我从中找到了答案。由于读取文件是异步进行的,我想我需要相应地进行处理。下面是对我有用的东西。(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);
}
为什么投反对票?