我在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/

10-12 12:27
查看更多