进度条在XMLHTTPRequest中不起作用

时间:2016-01-23 06:09:18

标签: javascript php ajax xmlhttprequest

我想在php中上传图片,但同时显示进度状态,在下面的代码中使用XMLHttpRequest图像正在上传,但我看不到进度条的移动。

这是我的代码。请帮助解决我的问题。

<html>
<head>
   <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
   <style type="text/css">
   .progress {
    display: block;
    text-align: center;
    width: 0;
    height: 20px;
    background: red;
    transition: width .3s;
}
.progress.hide {
    opacity: 0;
    transition: opacity 1.3s;
}
   </style>
<script type="text/javascript">

$(document).ready(function(){

$(document.body).on('click', '#button1' ,function(e){

var formData = new FormData($("#multiple_upload_form")[0]);
$.ajax({
    xhr: function () {
        var xhr = new window.XMLHttpRequest();
        xhr.upload.addEventListener("progress", function (evt) {
            if (evt.lengthComputable) {
                var percentComplete = evt.loaded / evt.total;
                alert("percentComplete"+percentComplete);
                console.log(percentComplete);
                $('.progress').css({
                    width: percentComplete * 100 + '%'
                });
                if (percentComplete === 1) {
                    $('.progress').addClass('hide');
                }
            }
        }, false);
        xhr.addEventListener("progress", function (evt) {
            if (evt.lengthComputable) {
                var percentComplete = evt.loaded / evt.total;
                console.log(percentComplete);
                $('.progress').css({
                    width: percentComplete * 100 + '%'
                });
            }
        }, false);
        return xhr;
    },
    type: 'POST',
    url: "ajax_upload.php",
    mimeType:"multipart/form-data", 
    data: formData,
    async : false,
    cache : false,
    contentType : false,
    processData:false,
    success: function (data) {  alert("data"+data);  }
});

});
});
</script>

</head>
<body>
<form method="post" enctype="multipart/form-data" id="multiple_upload_form">
<div class="progress"></div>
<input type="file" name="upload_f"/>
<input type="button" id="button1" name="button" value="submit"/>
</form>
</body>
</html>

ajax_upload.php

 <?php
 $output_dir = "upload/";
      $type="video";

      $fileName = $_FILES["upload_f"]["name"];
      $extn = pathinfo($fileName, PATHINFO_EXTENSION);

      if(move_uploaded_file($_FILES["upload_f"]["tmp_name"],$output_dir.$fileName))
      {
        echo "1";

      }
      else
      {
        echo "0";

      }   

 ?>

1 个答案:

答案 0 :(得分:2)

您的上传文件是 async ,所以请设置为true。 这是您的解决方案代码:

JS代码:

$(document).ready(function(){

    $(document.body).on('click', '#button1' ,function(e){

        var formData = new FormData($("#multiple_upload_form")[0]);
        $.ajax({
            xhr: function () {
                var xhr = new window.XMLHttpRequest();
                xhr.upload.addEventListener("progress", function (evt) {
                    if (evt.lengthComputable) {
                        var percentComplete = evt.loaded / evt.total;
                        console.log(percentComplete);
                        $('.progress').css({
                            width: percentComplete * 100 + '%'
                        });
                        if (percentComplete === 1) {
                            $('.progress').addClass('hide');
                        }
                    }
                }, true);
                xhr.addEventListener("progress", function (evt) {
                    if (evt.lengthComputable) {
                        var percentComplete = evt.loaded / evt.total;
                        console.log(percentComplete);
                        $('.progress').css({
                            width: percentComplete * 100 + '%'
                        });
                    }
                }, true);
                return xhr;
            },
            type: 'POST',
            url: "ajax_upload.php",
            mimeType:"multipart/form-data", 
            data: formData,
            async : true,
            cache : false,
            contentType : false,
            processData:false,
            success: function (data) {  alert("data"+data);  }
        });

    });
});

希望这对你有帮助!

相关问题