整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          JavaScript FormData 對象

          JavaScript FormData 對象

          面的代碼創(chuàng)建了一個空的 FormData 對象:

          var formData=new FormData(); // Currently empty


          FormData.append()

          FormData 接口的 append() 方法會添加一個新值到 FormData 對象內(nèi)的一個已存在的鍵中, 如果鍵不存在則會添加該鍵。


          你可以通過 FormData.append 往對象里加入鍵值對:

          formData.append('username', 'Chris');
          formData.append('userpic', myFileInput.files[0], 'chris.jpg');

          跟常規(guī)表單數(shù)據(jù)一樣,你可以使用同一個名稱添加多個值 。例如 (為了與PHP命名習(xí)慣一致在名稱中添加了[]):

          formData.append('userpic[]', myFileInput1.files[0], 'chris1.jpg');
          formData.append('userpic[]', myFileInput2.files[0], 'chris2.jpg');

          實例: 如何清空FormData對象的數(shù)據(jù)?

          現(xiàn)功能介紹:在使用form表單上傳圖片時,將上傳圖片縮略圖顯示在上傳圖片控件內(nèi)的方法

          HTML區(qū):
          
          <div class="form-group">
                <label for="avatar">頭像<img class="avatar" width="80px" height="80px"
                 src="{% static 'image/head/default.png' %}"
                           alt="圖片未加載出"></label>
                 <input type="file" id="avatar" style="display: none">
          </div>
          
          
          JS代碼區(qū)
          
          <script>
              {#替換頭像位置圖片方法#}
              $('#avatar').change(function () {
                      {#jquery對象轉(zhuǎn)換為DOM對象#}
                      var choose_file=$(this)[0].files[0];
                      {#創(chuàng)建一個閱讀器對象#}
                      var reader=new FileReader();
                      {#讀取choose_file的文件對象#}
                      reader.readAsDataURL(choose_file);
                      {#上面代碼加載完再運行函數(shù)內(nèi)代碼(原因:圖片未加載完下面的代碼就有可能執(zhí)行完了)#}
                      reader.onload=function () {
                          {# 路徑的值在reader.result中#}
                          $('.avatar').attr("src", reader.result)
                      }
                  }
              )
          </script>

          PS:注意務(wù)必要引入jQuery樣式

          最終結(jié)果顯示


          #python##Python入門推薦#

          . 概述

          FormData類型其實是在XMLHttpRequest 2級定義的,它是為序列化表以及創(chuàng)建與表單格式相同的數(shù)據(jù)(當(dāng)然是用于XHR傳輸)提供便利。

          2. 構(gòu)造函數(shù)

          創(chuàng)建一個formData對象實例有幾種方式

          1、創(chuàng)建一個空對象實例

          var formData=new FormData();

          此時可以調(diào)用append()方法來添加數(shù)據(jù)

          2、使用已有的表單來初始化一個對象實例

          假如現(xiàn)在頁面已經(jīng)有一個表單

          <form id="myForm" action="" method="post">
              <input type="text" name="name">名字
              <input type="password" name="psw">密碼
              <input type="submit" value="提交">
          </form>

          我們可以使用這個表單元素作為初始化參數(shù),來實例化一個formData對象

          // 獲取頁面已有的一個form表單
          var form=document.getElementById("myForm");
          // 用表單來初始化
          var formData=new FormData(form);
          // 我們可以根據(jù)name來訪問表單中的字段
          var name=formData.get("name"); // 獲取名字
          var psw=formData.get("psw"); // 獲取密碼
          // 當(dāng)然也可以在此基礎(chǔ)上,添加其他數(shù)據(jù)
          formData.append("token","kshdfiwi3rh");

          3. 操作方法

          首先,我們要明確formData里面存儲的數(shù)據(jù)形式,一對key/value組成一條數(shù)據(jù),key是唯一的,一個key可能對應(yīng)多個value。如果是使用表單初始化,每一個表單字段對應(yīng)一條數(shù)據(jù),它們的HTML name屬性即為key值,它們value屬性對應(yīng)value值。

          3.1 獲取值

          我們可以通過get(key)/getAll(key)來獲取對應(yīng)的value,

          formData.get("name"); // 獲取key為name的第一個值
          formData.get("name"); // 返回一個數(shù)組,獲取key為name的所有值

          3.2 添加數(shù)據(jù)

          我們可以通過append(key, value)來添加數(shù)據(jù),如果指定的key不存在則會新增一條數(shù)據(jù),如果key存在,則添加到數(shù)據(jù)的末尾

          formData.append("k1", "v1");
          formData.append("k1", "v2");
          formData.append("k1", "v1");
          
          formData.get("k1"); // "v1"
          formData.getAll("k1"); // ["v1","v2","v1"]

          3.3 設(shè)置修改數(shù)據(jù)

          我們可以通過set(key, value)來設(shè)置修改數(shù)據(jù),如果指定的key不存在則會新增一條,如果存在,則會修改對應(yīng)的value值。

          formData.append("k1", "v1");
          formData.set("k1", "1");
          formData.getAll("k1"); // ["1"]

          3.4 判斷是否該數(shù)據(jù)

          我們可以通過has(key)來判斷是否對應(yīng)的key值

          formData.append("k1", "v1");
          formData.append("k2",null);
          
          formData.has("k1"); // true
          formData.has("k2"); // true
          formData.has("k3"); // false

          3.5 刪除數(shù)據(jù)

          通過delete(key),來刪除數(shù)據(jù)

          formData.append("k1", "v1");
          formData.append("k1", "v2");
          formData.append("k1", "v1");
          formData.delete("k1");
          
          formData.getAll("k1"); // []

          3.6 遍歷

          我們可以通過entries()來獲取一個迭代器,然后遍歷所有的數(shù)據(jù),

          formData.append("k1", "v1");
          formData.append("k1", "v2");
          formData.append("k2", "v1");
          
          var i=formData.entries();
          
          i.next(); // {done:false, value:["k1", "v1"]}
          i.next(); // {done:fase, value:["k1", "v2"]}
          i.next(); // {done:fase, value:["k2", "v1"]}
          i.next(); // {done:true, value:undefined}

          可以看到返回迭代器的規(guī)則

          1. 每調(diào)用一次next()返回一條數(shù)據(jù),數(shù)據(jù)的順序由添加的順序決定
          2. 返回的是一個對象,當(dāng)其done屬性為true時,說明已經(jīng)遍歷完所有的數(shù)據(jù),這個也可以作為判斷的依據(jù)
          3. 返回的對象的value屬性以數(shù)組形式存儲了一對key/value,數(shù)組下標(biāo)0為key,下標(biāo)1為value,如果一個key值對應(yīng)多個value,會變成多對key/value返回

          我們也可以通過values()方法只獲取value值

          formData.append("k1", "v1");
          formData.append("k1", "v2");
          formData.append("k2", "v1");
          
          var i=formData.entries();
          
          i.next(); // {done:false, value:"v1"}
          i.next(); // {done:fase, value:"v2"}
          i.next(); // {done:fase, value:"v1"}
          i.next(); // {done:true, value:undefined}

          4. 發(fā)送數(shù)據(jù)

          我們可以通過xhr來發(fā)送數(shù)據(jù)

          var xhr=new XMLHttpRequest();
          xhr.open("post","login");
          xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
          xhr.send(formData);

          這種方式可以來實現(xiàn)文件的異步上傳。

          5. 其他

          瀏覽器兼容性查詢:https://caniuse.com/#search=formdata

          英文文檔:https://developer.mozilla.org/en-US/docs/Web/API/FormData


          轉(zhuǎn)自:https://segmentfault.com/a/1190000006716454


          主站蜘蛛池模板: 丝袜人妻一区二区三区网站 | 搜日本一区二区三区免费高清视频 | 99精品国产高清一区二区| 国模无码一区二区三区| 亚洲AV无码一区二区乱孑伦AS| 国产AⅤ精品一区二区三区久久| 欧美日韩一区二区成人午夜电影| 久久无码人妻一区二区三区| 国产一区二区三区免费观看在线| 国产一区二区在线|播放| 国模无码一区二区三区| 精品欧洲av无码一区二区14| 免费无码VA一区二区三区| 变态拳头交视频一区二区| 国产高清精品一区| 亚洲一区视频在线播放 | 国产精品夜色一区二区三区| 少妇无码一区二区三区免费| 亚洲一区二区三区在线观看精品中文 | 天堂va在线高清一区| 一区国产传媒国产精品| 伊人色综合一区二区三区影院视频| 国产精品亚洲午夜一区二区三区| 成人免费观看一区二区| 国产成人午夜精品一区二区三区| 国产乱码精品一区二区三区香蕉 | 国产乱码精品一区二区三区| 人妻精品无码一区二区三区| 成人精品一区二区电影| 国产伦一区二区三区免费| 国产激情精品一区二区三区| 人妻少妇一区二区三区 | 国产精品亚洲高清一区二区| 99久久精品国产免看国产一区 | 无码人妻精品一区二区三区9厂 | 精品人妻少妇一区二区三区不卡| 国产精品无码一区二区三区在| 午夜精品一区二区三区在线视 | 视频在线观看一区二区三区| 久久国产精品免费一区二区三区 | 亚洲欧美日韩中文字幕一区二区三区|