form.serializeArray()将每个元素转换为字符串

时间:2015-01-07 12:47:00

标签: javascript jquery

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

请为此提出解决方案。

2 个答案:

答案 0 :(得分:5)

您可以处理每个对象的value字符串,并创建一个包含转换值的新数组。例如,字符串truefalse将转换为它们各自的布尔值,数字将转换为整数。请注意,下面的示例非常简单,并未涵盖所有可能性(浮点数也会转换为整数)。

编辑:正如@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 的输出。

更可能的解决方案是教你的后端根据字段解析类型。您通常知道您在后端期望的内容,因此您也知道所需的类型,并且您可以(尝试)将其转换为正确的类型。