我经常搜索,但没有发现jquery的serialize
和serializeObject
方法之间存在完全差异。
请帮助我理解这一点。
答案 0 :(得分:33)
正如您所见here,serializeObject
不是本机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: "" }
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"
}]
就我个人而言,我更喜欢使用对象,因为它可以让您轻松修改数据并且可以将其发送到服务器。另一方面,如果您将数组发送到服务器,则需要额外的服务器端代码将其转换为对象,或找到正确的值。