serialize和serializeObject jquery之间的区别

时间:2013-07-05 12:13:51

标签: jquery

我经常搜索,但没有发现jquery的serializeserializeObject方法之间存在完全差异。

请帮助我理解这一点。

5 个答案:

答案 0 :(得分:33)

正如您所见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 做同样的事情。


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

请注意, 如果您需要 ,例如jQuery Core 原生的serailizeObject strong>,请参阅serializeArray

结果会略有不同,因为serializeArray会生成表单值的对象数组。每个对象都有{ name: "", value: "" }

EXAMPLE

请参阅示例中的Developer Tools Console

答案 1 :(得分:3)

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

答案 2 :(得分: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 :(得分:2)

我认为这很简单!TODO -

        var API = "https://api.datamarket.azure.com/Bing/MicrosoftTranslator/v1/translate?" +
            "Text=" + encodeURIComponent(text) +
            "&To=" + encodeURIComponent(to) +
            "&From=" + encodeURIComponent(from);

        var client = new XMLHttpRequest();

        client.open('POST', API, true);

        client.setRequestHeader('Authorization', 'Basic ' + 'what-goes-here-exactly??');

        client.onload = function(){
            if (client.status >= 200 && client.status > 300){
                resolve(client.responseText);
            }else{
                reject(client.response);
            }
        };

        client.error = function(){
            reject(client.response);
        };

        client.send();
    });

    return promise;
}

_translate("I love pizza", 'en', 'es')
    .then(function(translation){
        alert(translation);
    });

答案 4 :(得分:0)

Vanilla JS 为 .serialize().serializeArray().serializeObject() 的那些来这里的人。

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"
}]

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