File upload progress bar with jQuery

前端 未结 9 1615
野的像风
野的像风 2020-11-22 08:52

I am trying to implement an AJAX file upload feature in my project. I am using jQuery for this; my code submits the data using AJAX. I also want to implement a file upload p

相关标签:
9条回答
  • 2020-11-22 09:50

    This solved my problem

    $.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);
    var $link = $('.'+ids);
              var $img = $link.find('i'); 
              $link.html('Uploading..('+percentComplete+'%)');
              $link.append($img);
          }
        }, false);
    
        return xhr;
      },
      url: posturlfile,
      type: "POST",
      data: JSON.stringify(fileuploaddata),
      contentType: "application/json",
      dataType: "json",
      success: function(result) {
        console.log(result);
      }
    });
    
    0 讨论(0)
  • 2020-11-22 09:51

    Here is a more complete looking jquery 1.11.x $.ajax() usage:

    <script type="text/javascript">
        function uploadProgressHandler(event) {
            $("#loaded_n_total").html("Uploaded " + event.loaded + " bytes of " + event.total);
            var percent = (event.loaded / event.total) * 100;
            var progress = Math.round(percent);
            $("#uploadProgressBar").html(progress + " percent na ang progress");
            $("#uploadProgressBar").css("width", progress + "%");
            $("#status").html(progress + "% uploaded... please wait");
        }
    
        function loadHandler(event) {
            $("#status").html(event.target.responseText);
            $("#uploadProgressBar").css("width", "0%");
        }
    
        function errorHandler(event) {
            $("#status").html("Upload Failed");
        }
    
        function abortHandler(event) {
            $("#status").html("Upload Aborted");
        }
    
        $("#uploadFile").click(function (event) {
            event.preventDefault();
            var file = $("#fileUpload")[0].files[0];
            var formData = new FormData();
            formData.append("file1", file);
    
            $.ajax({
                url: 'http://testarea.local/UploadWithProgressBar1/file_upload_parser.php',
                method: 'POST',
                type: 'POST',
                data: formData,
                contentType: false,
                processData: false,
                xhr: function () {
                    var xhr = new window.XMLHttpRequest();
                    xhr.upload.addEventListener("progress",
                        uploadProgressHandler,
                        false
                    );
                    xhr.addEventListener("load", loadHandler, false);
                    xhr.addEventListener("error", errorHandler, false);
                    xhr.addEventListener("abort", abortHandler, false);
    
                    return xhr;
                }
            });
        });
    </script>
    
    0 讨论(0)
  • 2020-11-22 09:51

    Kathir's answer is great as he solves that problem with just jQuery. I just wanted to make some additions to his answer to work his code with a beautiful HTML progress bar:

    $.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').width(percentComplete+'%');
        $('.progress-bar').html(percentComplete+'%');
    
      }
    }, false);
    
    return xhr;
    },
    url: posturlfile,
    type: "POST",
    data: JSON.stringify(fileuploaddata),
    contentType: "application/json",
    dataType: "json",
    success: function(result) {
    console.log(result);
    }
    });
    

    Here is the HTML code of progress bar, I used Bootstrap 3 for the progress bar element:

    <div class="progress" style="display:none;">
    <div class="progress-bar progress-bar-success progress-bar-striped 
    active" role="progressbar"
    aria-valuemin="0" aria-valuemax="100" style="width:0%">
    0%
    </div>
    </div>
    
    0 讨论(0)
提交回复
热议问题