Javascript 在Chrome中加载文件时,FileReader readyState卡在1

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

我正在web应用程序中使用FileReader读取用户选择的本地文件,当我读取文本()时,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可以很好地写入本地存储。如果我在控制台中以静止状态(假设在#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);
        }

为什么投反对票?