簡(jiǎn)單了解Ajax表單序列化的實(shí)現(xiàn)方法
原生表單序列化
隨著Ajax的出現(xiàn),表單序列化已經(jīng)成為一種需求,在學(xué)習(xí)原生Ajax時(shí),若用POST方法向后臺(tái)提交數(shù)據(jù)時(shí),就需要將表單序列化
在JavaScript中可以利用表單字段的type屬性,連同name和value屬性,一起實(shí)現(xiàn)表單的序列化。
在進(jìn)行表單序列化之前,需要弄清楚在表單提交期間,瀏覽器是怎樣將數(shù)據(jù)發(fā)送給服務(wù)器的。
- --對(duì)表單字段的名稱和值進(jìn)行URL編碼,使用和號(hào)(&)分隔
- --不發(fā)送禁用的表單字段
- --只發(fā)送勾選的復(fù)選框和單選按鈕
- --不發(fā)送type為"reset"和"button"的按鈕
- --多選選擇框中的每個(gè)選中的值單獨(dú)一個(gè)條目
- --在單擊提交按鈕提交表單的情況下,也會(huì)發(fā)送提交按鈕,否則不發(fā)送提交按鈕
- --<select>元素的值,就是選中的<option>元素的value特性的值。如果<option>元素沒(méi)有value屬性,則就是<option>元素的文本值
實(shí)現(xiàn)表單序列化的函數(shù)為:
function serialize(form){ var parts=[], field=null, i, len, j, optLen, option, optValue; for (i = 0; i < form.elements.length; i++) { field=form.elements[i]; switch (field.type) { case 'select-one': case 'select-multiple': if(field.name.length){ for (var j = 0; j < field.options.length; j++) { option=field.options[j]; if (option.selected) { optValue=""; if (option.hasAttribute) { optValue=(option.hasAttribute('value') ? option.value : option.text); }else{ optValue=(option.attribute['value'].specified ? option.value : option.text); } parts.push(encodeURIComponent(field.name) + "=" + encodeURIComponent(optValue)); } } } break; case undefined: //字段集 case "file": //文本輸入 case "submit": //提交按鈕 case "reset": //重置按鈕 case "button": //自定義按鈕 break; case "radio": //單選按鈕 case "checkbox": //復(fù)選框 if (!field.checked) { break; } //執(zhí)行默認(rèn)操作 default: //不包含沒(méi)有名字的表單字段 if(field.name.length){ parts.push(encodeURIComponent(field.name) + "=" + encodeURIComponent(field.value)); } } } return parts.join("&"); }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JSON+JavaScript處理JSON的簡(jiǎn)單例子
JSON+JavaScript處理JSON的簡(jiǎn)單例子,需要的朋友可以參考一下2013-03-03JavaScript實(shí)現(xiàn)瀑布流布局的代碼分享
不知道大家在線上購(gòu)物的時(shí)候有沒(méi)有發(fā)現(xiàn)到,自己逛起來(lái)根本就停不下來(lái),越往下翻越是覺(jué)得就會(huì)出現(xiàn)需要的東西,這就是很多電商公司都在使用的瀑布流布局。本文就來(lái)用JS實(shí)現(xiàn)這一布局,需要的可以參考一下2023-04-04Bootstrap 模態(tài)框(Modal)帶參數(shù)傳值實(shí)例
模態(tài)框(Modal)是覆蓋在父窗體上的子窗體。下面通過(guò)本文給大家介紹Bootstrap 模態(tài)框(Modal)帶參數(shù)傳值實(shí)例代碼,需要的朋友參考下吧2017-08-08JavaScript如何實(shí)現(xiàn)對(duì)數(shù)字保留兩位小數(shù)一位自動(dòng)補(bǔ)零
本文給大家介紹基于JavaScript如何實(shí)現(xiàn)對(duì)數(shù)字保留兩位小數(shù)一位自動(dòng)補(bǔ)零的實(shí)例代碼,代碼簡(jiǎn)單易懂,感興趣的朋友一起學(xué)習(xí)吧2015-12-12js實(shí)現(xiàn)兼容PC端和移動(dòng)端滑塊拖動(dòng)選擇數(shù)字效果
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)兼容PC端和移動(dòng)端滑塊拖動(dòng)選擇數(shù)字的效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02el-input限制輸入只允許輸入浮點(diǎn)型的解決思路
本文主要是記錄,el-input怎么限制輸入只允許輸入浮點(diǎn)型,注意是輸入的時(shí)候限制只允許輸入浮點(diǎn)型,而不是輸入完提交的時(shí)候再校驗(yàn)提示,感興趣的朋友跟隨小編一起看看吧2024-03-03原生js實(shí)現(xiàn)class的添加和刪除簡(jiǎn)單代碼
下面小編就為大家?guī)?lái)一篇原生js實(shí)現(xiàn)class的添加和刪除簡(jiǎn)單代碼。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-07-07