new FormData() - FormData對象的做用及用法

1、概述

FormData 對象的使用:
1.用一些鍵值對來模擬一系列表單控件:即把form中全部表單元素的name與value組裝成
一個queryString
2. 異步上傳二進制文件。

2、使用

1.FormData對象的操做方法,所有在原型中,本身自己沒任何的屬性及方法。php

FormData對象的操做方法

let formData = new FormData()
formData.append('user', 'zhang')
獲取 formData.get('user')  //zhang
刪除 formData.delete('user')
.....

2.使用FormData對象發送文件ajax

HTML部分
<form action="">
        <label for="">
            姓名: <input type="text" name="name">
        </label>
        <label for="">
            文件:<input id="file" type="file" name="file">
        </label>
        <label for="">
            <input type="button" value="保存">
        </label>
</form>
JS部分
var btn = document.querySelector('[type=button]');
btn.onclick = function () {
    // 文件元素
    var file = document.querySelector('[type=file]');
    // 經過FormData將文件轉成二進制數據
    var formData = new FormData();
    // 將文件轉二進制
    *****注意2******
    formData.append('upload', file.files[0]);
    *****注意1******
    var xhr = new XMLHttpRequest;
    xhr.open('post', 'file.php');
    // 監聽上傳進度
    xhr.upload.onprogress = function (ev) {
    // 事件對象
    // console.log(ev);

        var percent = (ev.loaded / ev.total) * 100 + '%';

        console.log(percent);

        progress.style.width = percent;
    }

    xhr.send(formData);

    xhr.onreadystatechange = function () {
            if(xhr.readyState == 4 && xhr.status == 200) {
                    //
            }
    }
}

注意1:使用jQuery緩存

$.ajax({
    url: 'file.php',
    type: 'POST',
    data: formdata,                    // 上傳formdata封裝的數據
    dataType: 'JSON',
    cache: false,                      // 不緩存
    processData: false,                // jQuery不要去處理髮送的數據
    contentType: false,                // jQuery不要去設置Content-Type請求頭
    success:function (data) {           //成功回調
        console.log(data);
    }
});

注意2:參數
new FormData的參數是一個DOM對象,而非jQuery對象app

var formData = new FormData($("#file")[0]);

3、jQuery的參數序列化方法serialize()

序列表表格內容爲字符串,用於 Ajax 請求。
$("form").serialize()異步

相關文章
相關標籤/搜索