为什么进度条动画没有被XmlHttpRequest的addEventListener更新("进度" ..)?

时间:2014-09-09 14:05:30

标签: jquery file-upload jquery-file-upload multifile-uploader xmlhttprequest-level2

这是使用XmlHttpRequest API上传Javascript / JQuery多文件的工作示例。然后我注意到进度条动画没有更新。经过调试,我发现XmlHttpRequest的Progress监听器正在运行。

那么,是什么导致进度条不能自行更新?当我使用javascript alert()时,进度条动画会有效,但如果我为生产用户注释了javascript alert(),则进度条动画无效。

可能是什么问题?我们可以做些什么来解决这个问题?

/* Outer (1) - Centering the Popup Box... */
#WebUploadProgressWebpageOuter {  
    z-index:2497;
    display: none;
    width:100%;
    height:100%;
    position:absolute;
    top:0px;
    left:0px;
}
/* Middle (2) - Centering the Popup Box... */
#WebUploadProgressWebpageMiddle {
    vertical-align:middle;
    display:table-cell;
}
/* Inner (3) - Centering the Popup Box... */
#WebUploadProgressWebpageInnerDialogBox {
    margin: 0px auto;
    width: 600px;
    padding: 20px 20px 40px 20px;
    border: solid 2px #ccc;
    background-color: #F5F5F5;
    height: 320px;
    position: relative;
    -moz-box-shadow: 0 0 16px #ccc;
    overflow-x:auto;
}
.WebUploadProgressBar p {
    display: block;
    width: 350px;
    padding: 2px 5px;
    margin: 12px 0;
    border: 1px inset #446;
    border-radius: 5px;
}
$('#buttonFileBrowserUpload').on('change', function (e) {
    var formFiles = $('#buttonFileBrowserUpload')[0].files;
    var fileCount = 0;

    //Initialize & clear the html dialog data from previous File upload...
    $('#WebUploadProgressWebpageInnerDialogBox').empty();

    var htmlCustomUploadDialog = "";
    if ($('#WebUploadProgressWebpageOuter').length == 0) {
        htmlCustomUploadDialog += "<div id='WebUploadProgressWebpageOuter' style='display:none;'>";  //Hide the pop-up dialog til after the file-picker dialog is closed... /* To place this pop-up div on-top-of any of the AJAX's UpdatePanel html tag & javascript's popup error validation... */
        htmlCustomUploadDialog += " <div id='WebUploadProgressWebpageMiddle'>";
        htmlCustomUploadDialog += "  <div id='WebUploadProgressWebpageInnerDialogBox'></div>";
        htmlCustomUploadDialog += " </div>";
        htmlCustomUploadDialog += "</div>";
        $('body').append(htmlCustomUploadDialog);
    }

    //We'll grab our file upload form element (there's only one, hence [0]).
    $.each(formFiles, function (i, o) {
        //================================================================================
        //Build file-data layout and append to pop-up modal dialog...
        //================================================================================
        var htmlCustomFileDivBox = "<div id='WebUploadProgressFile" + i + "'>";
        htmlCustomFileDivBox += "    <div>Filename: <strong>" + o.name + "</strong><br />type: <strong>" + o.type + "</strong><br />size: <strong>" + o.size + "</strong> bytes</div>";
        htmlCustomFileDivBox += "    <div id='WebUploadProgressBarFile" + i + "' class='WebUploadProgressBar'><p>Upload file 0 %</p></div>";
        htmlCustomFileDivBox += "</div>";
        $('#WebUploadProgressWebpageInnerDialogBox').append(htmlCustomFileDivBox);
        //================================================================================

        //================================================================================
        //File Upload...
        //================================================================================
        var xhr = new XMLHttpRequest();
        var formData = new FormData();

        //Display the pop-up dialog...
        if (fileCount == 0) { $('#WebUploadProgressWebpageOuter').css({ "display": "table" }); }  //"display: table;" is required for the pop-up centering to work...

        formData.append("formVin", "1FAFP53U74A144331");
        formData.append(o.name, o);

        xhr.open("POST", "https://" + window.location.host + "/WebApi/AmazonCloud/VehiclePhotosManager/UploadAsync/102/83", true);
        xhr.upload.addEventListener("progress", function (e) {  //Update Uploading Progress-Bar...
            var percentage = parseInt(100 - (e.loaded / e.total * 100));
            alert(percentage);

            $("#WebUploadProgressBarFile" + i + " p").text("Upload filey " + percentage + " %");
        }, false);
        xhr.onreadystatechange = function () {
            if (xhr.readyState == 4) {
                fileCount++;

                if (xhr.status == 200) {
                    $("#WebUploadProgressBarFile" + i + " p").text("Upload filez 100 %");
                }

                if (fileCount == formFiles.length) {
                    $('#WebUploadProgressWebpageOuter').css({ "display": "none" });  //Close the pop-up dialog...
                }
            }
        };
        xhr.send(formData);
        //================================================================================
    });
});
Upload
<input type="file" id="buttonFileBrowserUpload" name="files[]" multiple />

0 个答案:

没有答案