成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

表單提交時編碼類型enctype詳解

jackzou / 3353人閱讀

摘要:以下引用,摘自規(guī)范的章節(jié)這不就是我們在回調(diào)函數(shù)里判斷返回數(shù)據(jù)的類型,并且是在請求頭中的那個玩意兒嗎沒錯就是它根據(jù)規(guī)范的基礎數(shù)據(jù)類型的說明,這個指定了連接資源的屬性,同時也是的那些媒體類型。今天掰扯完了表單提交時的編碼類型,以及它和的關系。

很早以前,當還沒有前端這個概念的時候,我在寫表單提交完全不去理會表單數(shù)據(jù)的編碼,在action屬性里寫好目標URL,剩下的啊交給瀏覽器吧~但是現(xiàn)在,更多時候我們都采用Ajax方式提交數(shù)據(jù),這種原始的方式僅僅被當成優(yōu)雅降級的產(chǎn)物。

當我們用異步方式提交表單,就需要稍微關注一下表單數(shù)據(jù)的編碼問題了。回想一下,在寫回調(diào)函數(shù)時是不是有根據(jù)過請求的Content-Type寫不同業(yè)務邏輯的經(jīng)歷,那這個Content-Type和表單的編碼有什么聯(lián)系嗎?有沒有在明明前端已經(jīng)發(fā)數(shù)據(jù)給后端了,后端的小伙伴死活取不到數(shù)據(jù)的情況?這些糾結(jié)的問題背后的原因真是困擾了我好久,今天在篇文章里就要把它們掰扯清楚!

是什么決定了表單的編碼?

熟悉表單元素

的小伙伴,對其中的屬性enctype一定不會陌生,就是它規(guī)定了對表單提交給服務器時表單數(shù)據(jù)編碼的內(nèi)容類型(Content Type)。以下引用,摘自HTML 4.01規(guī)范的Form章節(jié):

enctype = content-type [CI]
This attribute specifies the content type used to submit the form to the server

content type?這不就是我們在回調(diào)函數(shù)里判斷返回數(shù)據(jù)的類型,并且是在請求頭中的那個玩意兒嗎?!沒錯!就是它!根據(jù)HTML 4.01規(guī)范的基礎數(shù)據(jù)類型的說明,這個content type指定了連接資源的屬性,同時也是MIME type的那些媒體類型。

表單編碼類型

知道了表單編碼由enctype決定的,那么它究竟有多少可選的取值呢?是不是所有的MIME類型它都能用呢?
實際上,根據(jù)HTML5 規(guī)范中所敘述的,enctype具有以下三種選項,其中最后一項text/plain是相比4.01新增的。

application/x-www-form-urlencoded

multipart/form-data

text/plain

application/x-www-form-urlencoded

這是默認的編碼類型,使用該類型時,會將表單數(shù)據(jù)中非字母數(shù)字的字符轉(zhuǎn)換成轉(zhuǎn)義字符,如"%HH",然后組合成這種形式key1=value1&key2=value2;所以后端在取數(shù)據(jù)后,要進行解碼。

注意:

若表單中有文件,則只留文件名;

multipart/form-data

該類型用于高效傳輸文件、非ASCII數(shù)據(jù)和二進制數(shù)據(jù),將表單數(shù)據(jù)逐項地分成不同的部分,用指定的分割符分割每一部分。每一部分都擁有Content-Disposition頭部,指定了該表單項的鍵名和一些其他信息;并且每一部分都有可選的Content-Type,不特殊指定就為text/plain。下面給出一個采用multipart/form-data編碼類型的例子:

Content-Type: multipart/form-data; boundary=AaB03x   
--AaB03x   
Content-Disposition: form-data; name="submit-name"   
Larry   
--AaB03x   
Content-Disposition: form-data; name="files"; filename="file1.txt"   
Content-Type: text/plain   
... contents of file1.txt ...       
--AaB03x--

注意:

一般來說,methodenctype是兩個不同的互不影響的屬性,但在傳文件時,method必須要指定為POST,否則文件只剩下filename了;

當沒有傳文件時,enctype會改回默認的application/x-www-form-urlencoded。

text/plain

按照鍵值對排列表單數(shù)據(jù)key1=value1 key2=value2,不進行轉(zhuǎn)義。

注意:

若表單中有文件,則只留文件名;

application/json及其他MIME類型

另外,還需要說明表單數(shù)據(jù)編碼類型application/json,已經(jīng)被W3C遺棄(詳見HTML JSON Form Submission),建議不要在中使用了,即使用了如果瀏覽器不支持,也會替換成application/x-www-form-urlencoded。
同理,其余的MIME類型,也不支持,均會替換成默認編碼application/x-www-form-urlencoded

PS:貌似現(xiàn)在瀏覽器都不支持了,我先用了下面幾個瀏覽器:

FF43:Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:43.0) Gecko/20100101 Firefox/43.0

Chrome49, Safari9.1:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36

IE6, 8

后記

所以,enctype可以認為就是表單數(shù)據(jù)的content type(MIME type),只不過其取值不能用除了上面提到的三個,否則會轉(zhuǎn)換成默認的編碼。

今天掰扯完了表單提交時的編碼類型enctype,以及它和content typeMIME type的關系。下次再總結(jié)一下Ajax提交表單的類型吧。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/49810.html

相關文章

  • JS基礎篇--JS之表單提交編碼類型enctype詳解

    摘要:格式支持比鍵值對復雜得多的結(jié)構(gòu)化數(shù)據(jù),這一點也很有用。例如下面這段代碼最終發(fā)送的請求是這種方案,可以方便的提交復雜的結(jié)構(gòu)化數(shù)據(jù),特別適合的接口。 簡介 form的enctype屬性為編碼方式,常用有兩種:application/x-www-form-urlencoded和multipart/form-data,默認為application/x-www-form-urlencoded。 ...

    ad6623 評論0 收藏0
  • form表單---enctype屬性

    摘要:表單中的屬性,可以告訴服務器,我們提供給它的內(nèi)容的類型。屬性值表單中的屬性常用值,有以下三種注意或元素中,若使用會覆蓋屬性。表單只支持和請求。表單的屬性在中是有效的。屬性賦值不上上面的三種,會自動轉(zhuǎn)換為默認值。 知識點補充: MIME類型: 服務器需要將發(fā)送的多媒體數(shù)據(jù)的類型告訴瀏覽器,而告訴瀏覽器的手段就是告知多媒體的MIME類型。 form表單中的enctype屬性,可以告訴服務器...

    TIGERB 評論0 收藏0
  • JavaScript 表單腳本

    摘要:文本框獲得焦點時,選中其中所有的文本思路利用焦點事件事件,在文本框獲得焦點時,利用其方法選中所有文本。自動切換焦點思路利用事件檢測用戶輸入新字符后,文本框內(nèi)的字符串是否已經(jīng)達到最大長度,若達到最大長度,則將焦點切換至下一個文本框。 JavaScript 表單腳本 通過 document.forms 可以獲得一個包含當前頁面中所有表單的集合 HTMLFormElement 接口 下面是這...

    PrototypeZ 評論0 收藏0

發(fā)表評論

0條評論

jackzou

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<