【问题标题】:Difference between serialize and serializeObject jquery序列化和serializeObject jquery之间的区别
【发布时间】:2013-07-05 12:13:50
【问题描述】:

我搜索了很多,但没有找到 jquery 的 serializeserializeObject 方法之间的完美区别。

请帮助我理解这一点。

【问题讨论】:

  • jQuery 在其核心中没有名为 serializeObject 的方法。如果您看到它的用法,它可能在一个插件中,并且可能与serialize 做同样的事情
  • 据我所知serializeObject 不是核心 jquery 函数,所以首先你必须告诉我们你从哪里得到那个插件,但无论如何,不​​要认为它值得比较。
  • 更多信息请见here
  • @ClaudioRedi 在我的项目中,我使用 serializeObject 方法获取表单数据并通过 ajax 调用发送。所以我想知道它到底做了什么,我想向它推送额外的数据。

标签: jquery


【解决方案1】:

如您所见hereserializeObject 不是本机 jQuery 方法,因此只有在您或该站点的以前的程序员插入它时才会存在。正如Q&A found here 中提到的,当有人在您的网站“searched a way to serialize a form”上工作并发现以下扩展时,可能会发现此功能:

$.fn.serializeObject = function()
{
   var o = {};
   var a = this.serializeArray();
   $.each(a, function() {
       if (o[this.name]) {
           if (!o[this.name].push) {
               o[this.name] = [o[this.name]];
           }
           o[this.name].push(this.value || '');
       } else {
           o[this.name] = this.value || '';
       }
   });
   return o;
};

在您的 JS 中的某处寻找 serializeObject,但请注意,它可能不需要,因为它似乎与 $.fn.serialize 做同样的事情


经过进一步审查,我发现它并不完全相同。在其他问答中找到的serializeObject 方法会将表单的值序列化为对象,而serialize 将值编码为字符串以供提交。

请注意,如果你想要一些东西,比如 serailizeObjectjQuery 核心原生 ,那么请看serializeArray

结果会略有不同,serializeArray 将创建一个包含表单值的对象数组。每个对象都有{ name: "", value: "" }

EXAMPLE

例子请看Developer Tools Console

【讨论】:

  • 您应该使用if (o.hasOwnProperty(this.name)) 而不是if (o[this.name])。如果具有相同name 属性的组外第一个输入为空,则第二个变体将为false
  • @MaximPechenin :如果您通过阅读问题和答案,您会发现我没有写那个方法。我只是引用它,因为它是我可以在网上找到的最流行的形式。这一点是为了帮助 OP 确定导致干扰的方法可能在哪里。
【解决方案2】:

我在 stackoverflow 上进行了一些关于将表单序列化为 json 对象的挖掘工作,最终我找到了这个方法

$.fn.serializeObject = function()
{
   var o = {};
   var a = this.serializeArray();
   $.each(a, function() {
       if (o[this.name]) {
           if (!o[this.name].push) {
               o[this.name] = [o[this.name]];
           }
           o[this.name].push(this.value || '');
       } else {
           o[this.name] = this.value || '';
       }
   });
   return o;
};

但它不适合我的工作。所以我创建了自己的插件。如果你有兴趣,你可以看看https://github.com/citnvillareal/serializeObject

【讨论】:

    【解决方案3】:

    $.serializeObject 是现有$.serialize 方法的变体,它不是将表单元素编码为字符串,而是将表单元素转换为可在JavaScript 应用程序中使用的有效JSON 对象。

    【讨论】:

      【解决方案4】:

      我认为这是简单的方法!TODO--

      $.fn.serializeObject = function () {
              var o = {};
              this.find("[name]").each(function () {
                   o[this.name] = this.value;
              });
              return o;
          };
      

      【讨论】:

        【解决方案5】:

        .serialize().serializeArray().serializeObject() 的 Vanilla JS 用于那些为此而来的人。

        let form = document.querySelector("form");
        let params = new URLSearchParams(new FormData(form)).toString(); //query string, e.g. value=name&username=john
        //object
        let obj = {};
        params.split("&").map(function (q){let a = decodeURI(q).split("=");obj[a[0]] = a[1]});
        
        //array
        let arr = params.split("&").map(function (q){let a = decodeURI(q).split("="); return {name:a[0],value:a[1]}});
        

        一个对象看起来像:

        {
          name: "value",
          username: "john"
        }
        

        数组将是

        [{
           name: "name",
           value: "value"
        }, {
           name: "username",
           value: "john"
        }]
        

        就我个人而言,我更喜欢使用对象,因为它可以让您轻松修改数据并且可以将其发送到服务器。另一方面,如果您将数组发送到服务器,则需要额外的服务器端代码将其转换为对象,或找到正确的值。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-11-17
          • 2019-02-19
          • 1970-01-01
          • 2013-04-30
          • 2012-12-14
          • 2013-12-30
          • 2012-05-27
          • 1970-01-01
          相关资源
          最近更新 更多