表单的序列化

Ajax的封装分为两种,一种是对请求的封装,一种就是对表单的封装,表单的封装我们叫做“表单序列表”

表单序列表的基本数据构成

当我们点击“提交”的时候,会返回一个整合好的数据结构,比如"name=小明&age=18&sex=男&education=硕士"

我们将所有的可以遇到的表单类型都进行分类处理,然后统一汇总一个数组中,然后将这个数据进行数数据的转换,变成Ajax需要参数格式

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <form action="" id="formData">
    <p>
      姓名:<input type="text" name="name" id="">
    </p>
    <p>
      性别:
      <input type="radio" name="sex" value="" id=""><input type="radio" name="sex" value="" id=""></p>
    <p>
      学历:
      <input type="radio" name="education" value="高中">高中
      <input type="radio" name="education" value="大专">大专
      <input type="radio" name="education" value="本科">本科
      <input type="radio" name="education" value="硕士">硕士
      <input type="radio" name="education" value="博士">博士
    </p>
    <p>
      职位:
      <input type="checkbox" name="position" value="程序员">程序员
      <input type="checkbox" name="position" value="学生">学生
      <input type="checkbox" name="position" value="建筑师">建筑师
      <input type="checkbox" name="position" value="医生">医生
    </p>
    <p>
      籍贯:
      <select name="native" id="">
        <option value="北京" selected>北京</option>
        <option value="上海">上海</option>
        <option value="广州">广州</option>
        <option value="深圳">深圳</option>
      </select>
    </p>
    <p>
      备注:
      <textarea name="des"  cols="30" rows="10"></textarea>
    </p>
    <p>
      <input type="button" value="提交" id="btn">
    </p>
  </form>
  <script>
    var btn = document.getElementById("btn");
    //得到表单元素
    var formData = document.getElementById("formData");
    // 只有表单元素能够获取elements属性,得到所有的表单控件
    var elements = formData.elements;
    // 点击提交的时候能够获取所有的表单元素提交参数
    btn.onclick = function() {
      // 将所有的信息都存到数组中,最后用数组进行转换格式
      var temp = [];
      // 遍历所有的控件
      
      for(var i = 0; i < elements.length; i++) {
        // 通过不同类型获取对应的提交参数
        switch(elements[i].type) {
          case "text":
            if(elements[i].value) {
              temp.push(elements[i].name +"="+elements[i].value);
            }
            break;
          case "radio":
            // 因为我们的所有的radio如果直接通过.value会获取所有的值,无论选没选中,所以我们要先判断是否选中了
            if(elements[i].checked) {
              temp.push(elements[i].name +"="+elements[i].value);
            }
            break;
          case "checkbox":
            // 因为我们的所有的checkbox如果直接通过.value会获取所有的值,无论选没选中,所以我们要先判断是否选中了
            if(elements[i].checked) {
              temp.push(elements[i].name +"="+elements[i].value);
            }
            break;
          case "select-one":
            temp.push(elements[i].name +"="+elements[i].value);
            break;
          case "textarea":
            if(elements[i].value) {
              temp.push(elements[i].name +"="+elements[i].value);
            }
            break;
        }
      }
      var result = temp.join("&");
      console.log(result);
    }
  </script>
</body>
</html>

 

 

posted @ 2021-10-22 19:15  keyeking  阅读(206)  评论(0编辑  收藏  举报