【问题标题】:Progress Bar for file uploads to PHP using AJAX and Bootstrap使用 AJAX 和 Bootstrap 将文件上传到 PHP 的进度条
【发布时间】:2016-09-29 18:46:37
【问题描述】:

我有一个表单,我使用 AJAX 将图像上传到 PHP 脚本

这是我的表格

<form action ="upload.php" method = "POST" enctype = "multipart/form-data" class = "form-horizontal" name="formData" id="data">
        <!--File Upload-->
            <div class = "form-group">
                <label class="control-label col-sm-1" for = "file">File:</label>    
                    <div class="col-sm-9">
                        <input type = "file" name = "image_file" id = "image_file"  class = "form-control" accept="image/*" onChange="autoPull(this.value)";>
                    </div>
            </div>
            <div class = "form-group">
                <label class="control-label col-sm-1" for = "project_name">ProjectName:</label>
                    <div class="col-sm-9">
                        <input type = "text" name ="project_name" id = "project_name" class = "form-control" placeholder="Enter Project Name"  value = "" required>
                    </div>
            </div>
            <div class = "button">
                <div class="form-group">
                    <div class="col-sm-offset-1 col-sm-6">
                        <input type="submit" name = "submit" class="btn btn-primary" value = "Submit" id="file_upload">
                        <input type="reset" name = "submit" class="btn btn-default" value = "Reset">
                    </div>
                </div>
            </div>
        </form>
        <br/>
            <div class="progress" style="display:none;">
              <div class="progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width:0%;">

              </div>
            </div>
        <div id = "result"></div>

结果 div 是显示 PHP 输出的位置(参见 AJAX)

进度条是我希望看到我的引导进度条的地方。

这是我的 AJAX

$(function () {
        $('form#data').submit(function (e){
            e.preventDefault();
            e.stopImmediatePropagation();
            var formData = new FormData($(this)[0]);
            var file = $('input[type=file]')[0].files[0];
            formData.append('upload_file',file);
            $('.progress').show();
            $.ajax({
                xhr: function() {
                    var xhr = new window.XMLHttpRequest();
                    xhr.upload.addEventListener("progress", function(evt) {
                        if (evt.lengthComputable) {
                            var percentComplete = evt.loaded / evt.total;
                            percentComplete = parseInt(percentComplete * 100);
                            $('.progress-bar').css('width',percentComplete+"%");
                            $('.progress-bar').html(percentComplete+"%");
                            if (percentComplete === 100) {

                        }
                      }
                    }, false);
                    return xhr;
                  },
                type:'POST',
                url: 'upload.php',
                data: formData,
                async:false,
                cache:false,
                contentType: false,
                processData: false,
                success: function (returndata) {
                    $('#result').html(returndata);  
                }
            });
            return false;
        }); 
});

现在我得到一个输出,它显示了 PHP 中回显的数据。但由于某种原因,我无法让进度条工作。

可能是什么问题?

【问题讨论】:

  • 您是否尝试过实际发出异步请求,即删除 async : false
  • @adeneo 谢谢这工作!
  • @adeneo 所以当我提交时,进度条第一次达到 100%。对于后续文件,它不会重新加载,它保持在 100。我在这里缺少什么?
  • 你不能把宽度设置回零
  • @adeneo 谢谢,工作。

标签: php jquery ajax forms twitter-bootstrap


【解决方案1】:

应该这样做

    var progress_bar = $(".progress-bar");
    progress_bar.html("0%");
    progress_bar.css("width", 0);
    $(".progress").hide();

【讨论】:

    【解决方案2】:

    删除

    async : false;
    

    解决了。但我现在需要看看如何重置栏。

    【讨论】:

      猜你喜欢
      • 2013-01-25
      • 1970-01-01
      • 2012-04-10
      • 1970-01-01
      • 2011-09-26
      • 1970-01-01
      • 1970-01-01
      • 2012-09-12
      • 1970-01-01
      相关资源
      最近更新 更多