H5实现formdata+ajax+上传进度上传文件

技术点:1)H5 formData(),2)XMLHttpRequest()

利用 FormData 对象,我们可以通过 js 用一些键值对来模拟一系列表单控件,我们还可以使用 XMLHttpRequest 的 send() 方法来异步的提交表单。与普通的 Ajax 相比,使用 FormData 的最大优点就是我们可以异步上传二进制文件。

案例:

$inputObj.change(function(){
    var file = $(this)[0].files[0];
    makeDoThisFile(file);
});

function makeDoThisFile(file){
    var size = file.size,
        type = file.type,
        name = file.name;

    //创建FormData对象
    var formDataA = new FormData();
    //添加文件
    formDataA.append('file',file);
    //添加提交按钮
    formDataA.append("submit", "submit");
   //创建ajax对象
    var xhr = new XMLHttpRequest(); 
    xhr.open('POST','php/uploadFile.php',true); // 异步传输
    //文件上传进度
    xhr.upload.onprogress = function (ev) {//
        var percent = 0; 
         if(ev.lengthComputable) { 
              percent = 100 * ev.loaded/ev.total; 
              console.log('已经上传'+percent);
         } 
     }

     //发送请求
     xhr.send(formDataA);
     //执行回调函数
     xhr.onreadystatechange = callBlack;

     //执行ajax回调函数
    function callBlack(){
        var readyState = xhr.readyState;//HTTP 请求的状态
        var status = xhr.status;//请求的状态码

        //如果HTTP 响应已经完全接收。并且 由服务器返回的 HTTP 状态代码,如 200 表示成功
            if(readyState == 4 && status == 200){    
              var response   = xhr.responseText;//目前为止为服务器接收到的响应体  
               console.log(response); 
             } 

      }; 

}

兼容须知:

Chrome 7+

Firefox (Gecko2.0+) 4.0+

Internet Explorer 10+

Opera 12+

Safari 5+

 

原文地址:https://www.cnblogs.com/xxyy1122/p/4997084.html