XHR进度事件在上传完成之前不会触发?

时间:2014-10-31 17:33:04

标签: javascript jquery ajax cordova xmlhttprequest

我使用以下$ .ajax命令从PhoneGap应用程序上传文件:

function updateProgress( evt ) {
    if ( evt.lengthComputable ) {
        var percentComplete = evt.loaded / evt.total * 100;
        console.log( percentComplete + "%" );
    }
}

$.ajax({
    url: url,
    type: "POST",
    data: data,
    cache: false,
    dataType: "json",
    processData: false, 
    contentType: false, 
    success: successCallback,
    error: errorCallback,
    xhr: function() {
        var xhr = new window.XMLHttpRequest();
        xhr.addEventListener( "progress", updateProgress, false);
        return xhr;
    }
});

上传工作正常。但是,一旦上传完成,进度事件只会触发一次。它实际上并没有在上传期间触发 - 因此实际上不会显示上传进度。上传时只有暂停,然后显示100%。

任何想法我做错了什么?

1 个答案:

答案 0 :(得分:16)

progress上触发上传xhr.upload个事件,因此请将侦听器附加到xhr而不是progressxhr对象上还有xhr.upload.addEventListener('progress', updateProgress, false) 个事件,但这是针对从服务器返回的响应。

有关详细信息,请参阅the MDN article

a-z

(感谢A. Wolff及其对OP的评论。)

相关问题