Javascript form序列化是指將HTML表單元素的值序列化為可提交的字符串。這個過程可以方便地將用戶輸入的數(shù)據(jù)傳送到服務器端進行數(shù)據(jù)處理。下面我們通過舉例來學習Javascript form序列化。
假設我們有這樣一個HTML表單:
<form id="myForm"> <input type="text" name="username" value="John"> <input type="password" name="password" value="123456"> <input type="checkbox" name="hobby" value="music" checked>音樂 <input type="checkbox" name="hobby" value="reading">閱讀 <input type="radio" name="gender" value="male" checked>男性 <input type="radio" name="gender" value="female">女性 <select name="province"> <option value="bj" selected>北京</option> <option value="sh">上海</option> <option value="gz">廣州</option> </select> <input type="submit" value="提交"> </form>
通過form序列化,可以將此表單序列化成如下形式的字符串:
username=John&password=123456&hobby=music&hobby=reading&gender=male&province=bj
其中,每個文本框、密碼框、單選框、下拉框的值被轉化成名-值對的形式,并用“&”符號拼接起來。復選框則會變成重復的名-值對。
Javascript提供了現(xiàn)成的方法可以幫助我們實現(xiàn)form序列化,代碼如下:
var form = document.getElementById('myForm'); var data = new FormData(form); var serializedData = new URLSearchParams(data).toString(); console.log(serializedData); // 輸出:username=John&password=123456&hobby=music&hobby=reading&gender=male&province=bj
如果你的瀏覽器不支持FormData,你可以通過手動組裝數(shù)據(jù)來實現(xiàn)form序列化。代碼如下:
function serialize(form) { var formData = []; var fieldset = form.elements; for (var i = 0, len = fieldset.length; i< len; i++) { var item = fieldset[i]; var name = encodeURIComponent(item.name); var value = encodeURIComponent(item.value); if (item.type === 'checkbox' && !item.checked) { continue; } formData.push(name + '=' + value); } return formData.join('&'); } var form = document.getElementById('myForm'); var serializedData = serialize(form); console.log(serializedData); // 輸出:username=John&password=123456&hobby=music&gender=male&province=bj
在表單序列化的過程中,需要注意以下幾點:
- 序列化結果中的特殊字符,如空格、點、換行符等會被轉義成URL編碼,這點需特別留意。
- 復選框的處理需要注意,因為同一個名字的復選框可能有多個值。如果復選框沒有選中,應該跳過該項。
- 例如下拉框等沒有選中時,該項的值也不會被序列化。
在實際開發(fā)中,我們經常需要將表單數(shù)據(jù)序列化成可傳輸?shù)淖址袷剑苿佣撕碗娔X端的瀏覽器支持的方式也不盡相同,好在我們有現(xiàn)成的代碼庫可以使用。掌握form序列化的方法不僅可降低開發(fā)難度,同時也可以提高代碼的執(zhí)行效率,讓數(shù)據(jù)的傳送更加方便快捷。希望本文能夠對大家有所幫助。