iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >JS中如何使用serialize()
  • 855
分享到

JS中如何使用serialize()

2024-04-02 19:04:59 855人浏览 泡泡鱼
摘要

这篇文章主要介绍了js中如何使用serialize(),具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体如下:在实际开发场景中,难免遇到需要

这篇文章主要介绍了js中如何使用serialize(),具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

具体如下:

在实际开发场景中,难免遇到需要多个表单的数据传递问题。

之所以要进行多表单的数据传递是因为可以进行数据分组,便于数据的维护。

这个时候,出于不依赖Jquery的考虑,有一个原生js函数来解决这个问题无疑是最好的。而源自于《javascript高级程序设计》一书的serialize()函数就是解决这个问题的最好办法,该函数如下:

function serialize(fORM){
      var parts = [],
        field = null,
        i,
        len,
        j,
        optLen,
        option,
        optValue;
      for (i=0, len=form.elements.length; i < len; i++){
        field = form.elements[i];
        switch(field.type){
          case "select-one":
          case "select-multiple":
            if (field.name.length){
              for (j=0, optLen = field.options.length; j < optLen; j++){
                option = field.options[j];
                if (option.selected){
                  optValue = "";
                  if (option.hasAttribute){
                    optValue = (option.hasAttribute("value") ? option.value : option.text);
                  } else {
                    optValue = (option.attributes["value"].specified ? option.value : option.text);
                  }
                  parts.push(encodeURIComponent(field.name) + "=" + encodeURIComponent(optValue));
                }
              }
            }
            break;
          case undefined:   //fieldset
          case "file":    //file input
          case "submit":   //submit button
          case "reset":    //reset button
          case "button":   //custom button
            break;
          case "radio":    //radio button
          case "checkbox":  //checkbox
            if (!field.checked){
              break;
            }
            
          default:
            //don't include form fields without names
            if (field.name.length){
              parts.push(encodeURIComponent(field.name) + "=" + encodeURIComponent(field.value));
            }
        }
      }
      console.log(parts);
      return parts.join("&");
}

对于读过《JavaScript高级程序设计》的小伙伴来说,这个函数肯定不陌生;

但是如果我们传递的是一个对象,那么这个函数显然就不符合要求,而在这个开发需求下,我们改下这个函数,改造后函数如下

function serialize(form){
      var parts = {},
        field = null,
        i,
        len,
        j,
        optLen,
        option,
        optValue;
      for (i=0, len=form.elements.length; i < len; i++){
        field = form.elements[i];
        switch(field.type){
          case "select-one":
          case "select-multiple":
            if (field.name.length){
              for (j=0, optLen = field.options.length; j < optLen; j++){
                option = field.options[j];
                if (option.selected){
                  optValue = "";
                  if (option.hasAttribute){
                    optValue = (option.hasAttribute("value") ? option.value : option.text);
                  } else {
                    optValue = (option.attributes["value"].specified ? option.value : option.text);
                  }
                  //将数据改为对象形式
                  Object.defineProperty(parts, encodeURIComponent(field.name), {
                    value:encodeURIComponent(optValue),
                    enumerable:true //为真表示可枚举,只有可枚举才能出现在JSON.stringify()转换的json数据中
                  });
                }
              }
            }
            break;
          case undefined:   //fieldset
          case "file":    //file input
          case "submit":   //submit button
          case "reset":    //reset button
          case "button":   //custom button
            break;
          case "radio":    //radio button
          case "checkbox":  //checkbox
            if (!field.checked){
              break;
            }
            
          default:
            //don't include form fields without names
            if (field.name.length){
              //构建对象
              Object.defineProperty(parts, encodeURIComponent(field.name), {
                    value:encodeURIComponent(field.value),
                    enumerable:true  //为真表示可枚举,只有可枚举才能出现在JSON.stringify()转换的json数据中
                  });
            }
        }
      }
      console.log(parts);
      return parts;
}

于是,表单数据改为对象显示。如果有多个表单将表单保存到一个数组之中,利用JSON.stringify()转为json格式,传给后端

注意:

利用Object.defineProperty创建对象,要加上 enumerable:true,否则json格式中不会出现对应的对象数据。这个纯粹是JSON.stringify()的要求。

感谢你能够认真阅读完这篇文章,希望小编分享的“JS中如何使用serialize()”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网node.js频道,更多相关知识等着你来学习!

--结束END--

本文标题: JS中如何使用serialize()

本文链接: https://www.lsjlt.com/news/78949.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JS中如何使用serialize()
    这篇文章主要介绍了JS中如何使用serialize(),具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体如下:在实际开发场景中,难免遇到需要...
    99+
    2024-04-02
  • serialize()如何使用
    这篇文章主要讲解了“serialize()如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“serialize()如何使用”吧!   .seriali...
    99+
    2024-04-02
  • jquery中serialize方法如何用
    这篇文章主要介绍“jquery中serialize方法如何用”,在日常操作中,相信很多人在jquery中serialize方法如何用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2024-04-02
  • php中的serialize和unserialize怎么使用
    本文小编为大家详细介绍“php中的serialize和unserialize怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“php中的serialize和unserialize怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢...
    99+
    2023-07-05
  • jQuery中serialize()怎么用
    这篇文章给大家分享的是有关jQuery中serialize()怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。   jQuery成功的控制表单的序列化。只有form元素检查...
    99+
    2024-04-02
  • html5中如何使用js
    这篇文章给大家分享的是有关html5中如何使用js的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 在html5中使用js的两种方法: 使用<script>标签的方...
    99+
    2024-04-02
  • js中如何使用Object.prototype.toString.call()
    这篇文章主要为大家展示了“js中如何使用Object.prototype.toString.call()”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“js中如何...
    99+
    2024-04-02
  • Vue中如何使用js-cookie
    小编给大家分享一下Vue中如何使用js-cookie,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、安装js-cookiecnpm i -S...
    99+
    2023-06-29
  • 如何使用JS中的webWorker
    目录一、webWorker之初体验二、webWorker之常用API1、postMessage(data)2、terminate()3、message4、error三、worker上...
    99+
    2024-04-02
  • JS中Object.assign方法如何使用
    今天小编给大家分享一下JS中Object.assign方法如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、基本语法...
    99+
    2023-07-02
  • JS中如何使用async与await
    小编给大家分享一下JS中如何使用async与await,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、asyncasync创建一个异步函数来定义一个代码块,在其...
    99+
    2023-06-22
  • js中如何使用filter去重
    这篇文章主要介绍js中如何使用filter去重,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!JavaScript有什么特点1、js属于一种解释性脚本语言;2、在绝大多数浏览器的支持下,js可以在多种平台下运行,拥有着...
    99+
    2023-06-14
  • php中serialize和unserialize怎么用
    这篇文章给大家分享的是有关php中serialize和unserialize怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。PHP中,serialize()函数用于序列化对象或数组,unserialize()...
    99+
    2023-06-29
  • 浅析php中serialize和unserialize的用法
    PHP是一种流行的编程语言,常用于Web开发。其中,serialize和unserialize是两个非常有用的函数,可以将PHP对象转换为字符串并进行反序列化。serialize的使用serialize是一个PHP函数,用于将PHP对象转换...
    99+
    2023-05-14
    unserialize serialize php
  • 如何使用JS库
    本篇内容主要讲解“如何使用JS库”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用JS库”吧!一、clipboard.js 简介clipboard.js 是...
    99+
    2024-04-02
  • js如何使用window.alert()
    小编给大家分享一下js如何使用window.alert(),相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!使用 window.al...
    99+
    2024-04-02
  • js如何使用Object.entries
    小编给大家分享一下js如何使用Object.entries,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Object.entries大多数开发人员使用 Objec...
    99+
    2023-06-27
  • js如何使用innerHTML
    这篇文章主要为大家展示了“js如何使用innerHTML”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“js如何使用innerHTML”这篇文章吧。使用 inne...
    99+
    2024-04-02
  • JS event如何使用
    在JavaScript中,事件可以使用以下方式来使用:1. HTML属性:可以将事件直接作为HTML元素的属性来使用。例如,可以使用...
    99+
    2023-08-14
    JS event
  • js如何使用console.log()
    这篇文章主要为大家展示了“js如何使用console.log()”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“js如何使用console.log()”这篇文章吧...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作