为jQuery.ajax()设置post数据时,为什么serialize()与serializeArray()具有相同的效果?

时间:2010-11-20 21:17:25

标签: jquery forms serialization

我在下面有一个jQuery-AJAX代码和一个表单:

<script type="text/javascript">
$(document).ready(function () {
    $('form').submit(function () {
        form_data = $(this).serializeArray();

        $.ajax({
            url: "/frontend_dev.php/coche1/update/id/1",
            type: "POST",
            data: form_data

            });
        });
        return false;

});
</script>

正如您所看到的,我正在使用serializeArray(),但当我使用serialize()时,它的工作方式也相同......

为什么两种情况都一样?我应该用它们做什么?

我使用symfony作为php框架。如果您需要,我可以为您提供更多信息。

3 个答案:

答案 0 :(得分:16)

如果对象/数组被传递(.serializeArray()返回),则通过$.param()序列化。

如果一个字符串被传递(.serialize()返回),它就不再做任何事了。

...因此,当它们作为data属性传递时,它们具有相同的效果。 You can find the relevant check here

    // convert data if not already a string
    if ( s.data && s.processData && typeof s.data !== "string" ) {
        s.data = jQuery.param( s.data, s.traditional );
    }

你应该使用哪一个?它真的 并不重要,.serialize() makes the same $.param() call,所以他们做的工作完全相同。我个人使用.serialize(),因为输入的次数更少。

答案 1 :(得分:5)

在这种情况下,它们是相同的。但是如果你没有指定类型会有很大的不同 - serialize会做一个GET而serializeArray会做一个POST!

答案 2 :(得分:0)

我注意到在CodeIgniter中,.serialize方法可以生成被CodeIgniter的CSRF保护污染的数据(CodeIgniter以某种方式将分号添加到数组键),而我用.serializeArray提交的表单没有有这个问题。

此外,如果您使用复杂的POST名称,例如name =“some [a] [data] [structure]”$ _POST数组中的位置发生变化并且不是任意的,然后使用.serialize可能会更容易,因为你可以将它转换回PHP数据结构更多容易。