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

zii*_*web 17 forms jquery 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>
Run Code Online (Sandbox Code Playgroud)

你可以看到我正在使用serializeArray()但是当我使用serialize()它时它的工作方式也是一样的..

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

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

Nic*_*ver 16

如果传递了一个对象/数组(.serializeArray()返回),则通过它进行序列化$.param().

如果字符串被传递(.serialize()返回),则它不会做任何进一步的操作.

......所以当它们作为data财产传递时,它们具有相同的效果. 你可以在这里找到相关的支票:

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

你应该使用哪一个?它真的在这里并不重要,.serialize()使得同样的$.param()电话,让他们做的工作完全相同的量.我个人使用,.serialize()因为输入的次数更少.


小智 5

在这种情况下,它们是相同的.但是如果你没有指定类型会有很大的不同 - serialize将执行GET serializeArray并将执行POST!