【问题标题】:Track ajax post progress for fileupload using jquery ajax and FormData使用 jquery ajax 和 FormData 跟踪文件上传的 ajax 发布进度
【发布时间】:2012-12-09 18:10:12
【问题描述】:
var files = [];

$(document).ready(function (){
    dropArea = document.getElementById("droparea");
});

// when we drag and drop files into the div#droparea
dropArea.addEventListener("drop", function (evt) {
    files = evt.dataTransfer.files;
}, false);  

function uploadFiles(stepX) {
    var url = "/ajax/uploadfiles.php";
    var type = "POST";

    if (files.length > 0) {
         var data = new FormData(); // we use FormData here to send the multiple files data for upload

          for (var i=0; i<files.length; i++) {
       var file = files[i];
             data.append(i, file);  
   }
         //start the ajax
         return $.ajax({
   //this is the php file that processes the data and send mail
         url: url,  

  //POST method is used
  type: type,

   //pass the data          
   data: data,      

    //Do not cache the page
          cache: false,

// DO NOT set the contentType and processData
// see http://stackoverflow.com/a/5976031/80353
contentType: false,
processData: false,

//success
      success: function (json) {                
      //if POST is a success expect no errors
     if (json.error == null && json.result != null) {                   
                    data = json.result.data;

                // error 
                } else {
                    alert(json.error);  
                }           
            }       
        });
    } 
    return {'error' : 'No files', 'result' : null};
}

如果我想保留此方法将文件上传到服务器,如何跟踪文件上传的进度?

【问题讨论】:

    标签: javascript jquery ajax file-upload progress-bar


    【解决方案1】:

    注意带有@TODO 的注释

    //start the ajax
    return $.ajax({
                //this is the php file that processes the data and send mail
                url: url,   
    
                //POST method is used
                type: type,
    
                //pass the data         
                data: data,     
    
                //Do not cache the page
                cache: false,
    
                //@TODO start here
                xhr: function() {  // custom xhr
                    myXhr = $.ajaxSettings.xhr();
                    if(myXhr.upload){ // check if upload property exists
                        myXhr.upload.addEventListener('progress',progressHandlingFunction, false); // for handling the progress of the upload
                    }
                    return myXhr;
                },
                //@TODO end here
    
                // DO NOT set the contentType and processData
                // see http://stackoverflow.com/a/5976031/80353
                contentType: false,
                processData: false,
    

    添加更新进度的独立函数。

    function updateProgress(evt) {
        console.log('updateProgress');
        if (evt.lengthComputable) {
                var percentComplete = evt.loaded / evt.total;
                console.log(percentComplete);
        } else {
                // Unable to compute progress information since the total size is unknown
                console.log('unable to complete');
        }
    }
    

    来自https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest/Using_XMLHttpRequest > 监控进度

    【讨论】:

    • 非常感谢!工作正常。
    猜你喜欢
    • 2015-04-04
    • 2016-03-22
    • 1970-01-01
    • 2018-03-18
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    • 2011-06-18
    相关资源
    最近更新 更多