尝试form.serializeArray()并将序列化数据传递给服务器。
问题:此方法还将布尔值和整数转换为字符串。并在服务器端的基础上 值,我试图获取数据类型,因为它每次都给我字符串。
实际输出:
[Object { name="para1", value="1"}, Object { name="para2", value="2"}, Object { name="para3", value="true"}, Object { name="para4", value="rep1"}]
必需输出:
[Object { name="para1", value=1}, Object { name="para2", value=2}, Object { name="para3", value=true}, Object { name="para4", value="rep1"}]
请为此提出解决方案。
答案 0 :(得分:5)
您可以处理每个对象的value
字符串,并创建一个包含转换值的新数组。例如,字符串true
和false
将转换为它们各自的布尔值,数字将转换为整数。请注意,下面的示例非常简单,并未涵盖所有可能性(浮点数也会转换为整数)。
编辑:正如@sanfor在评论中所指出的,每个包含整数的字符串都会转换为整数值,但"123"
之类的字符串也可以视为字符串。但是,如果问题中的信息输入类型未知,则此方法可提供所需的结果。
JSFiddle(打开控制台查看输出):
var values = [
{
name: 'para1',
value: '1'
},
{
name: 'para2',
value: 'true'
},
{
name: 'para3',
value: 'this is a string'
}
];
var result = values.map(function(obj) {
var value;
if (obj.value === 'true') {
value = true;
} else if (obj.value === 'false') {
value = false;
} else if (!isNaN(obj.value)) {
value = parseInt(obj.value);
} else {
value = obj.value;
}
return {
name: obj.name,
value: value
};
});
console.log(result);
答案 1 :(得分:1)
正如@Vohuman已经提到的,值是预期的字符串。要使它们成为别的东西,您需要使用其他函数来实现它,或者之后处理 serializeArray 的输出。
更可能的解决方案是教你的后端根据字段解析类型。您通常知道您在后端期望的内容,因此您也知道所需的类型,并且您可以(尝试)将其转换为正确的类型。