Javascript AJAX上载与Firefox不兼容

Javascript AJAX上载与Firefox不兼容,javascript,ajax,firefox,xmlhttprequest,Javascript,Ajax,Firefox,Xmlhttprequest,我的站点使用AJAX上传,Javascript是我的选择(不是jQuery)。 但是我的想法与Firefox不兼容。以下是XMLHttpRequest代码块: var xhr = new XMLHttpRequest(); xhr.open("POST", "upload.php"); xhr.onprogress = function(event){ if(event.lengthComputable) { c

我的站点使用AJAX上传,Javascript是我的选择(不是jQuery)。 但是我的想法与Firefox不兼容。以下是XMLHttpRequest代码块:

    var xhr = new XMLHttpRequest();

    xhr.open("POST", "upload.php");

    xhr.onprogress = function(event){
        if(event.lengthComputable)
        {
            console.log(event.loaded);
        }
    };

    xhr.setRequestHeader("Cache-Control", "no-cache");

    xhr.send(formData);
并注意
xhr.onprogress
事件

或者,我还使用以下代码进行进度:

xhr.upload.addEventListener("progress", function(){
// do something
}, false);
但是:

对于第一个解决方案,即
xhr.onprogress
,它有一个问题:

它只显示上载完成后加载的
事件量。此数量与文件大小相同,因为上载已完全加载文件。
它在FF和chrome中都能工作,但我不这么认为;I don’我不想让它在进程结束后抛出一个值

第二个解决方案很好,可以正常工作,但在firefox中根本不起作用。但是在firefox中,没有抛出错误,正如我所测试的那样,
progressEvent
根本不会被触发


chrome和Firefox都是最新版本。

我认为问题在于在
open()
之后添加
onprogress
侦听器,应该在之前完成:

var xhr = new XMLHttpRequest();
xhr.onprogress = function (event) {
    if (event.lengthComputable) {
        console.log(event.loaded);
    }
};

xhr.open("POST", "upload.php");
或:


它们都不起作用。甚至在open()之前,它在firefox中仍然很糟糕。@MT Developer的长度不可计算(大小未知,那么event.lengthComputable==false)或者根本没有触发进度事件?该事件在上载结束时触发,因此在最后,您会看到一个表示事件的数字。已加载。虽然我希望从开始到结束都能得到一个不断变化的值……是的,我的意思是:事件本身永远不会被触发,或者LengthComputeable只有在结束时才是真的(所以你只有在完成后才登录到控制台)?FF上的progress event(或者OSX和Linux上的#908375)有一个已知的bug,是你的情况吗?
var xhr = new XMLHttpRequest();
xhr.addEventListener("progress", function (event) {
    if (event.lengthComputable) {
        console.log(event.loaded);
    }
}, false);

xhr.open("POST", "upload.php");