代码之家  ›  专栏  ›  技术社区  ›  tirenweb

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

  •  17
  • tirenweb  · 技术社区  · 14 年前

    我有下面的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 回复  |  直到 12 年前
        1
  •  16
  •   Nick Craver    14 年前

    如果传递了一个对象/数组 .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() 因为打字简单。

        2
  •  5
  •   Konrad Viltersten    12 年前

    在这种情况下,它们是一样的。但是如果不指定类型serialize将执行GET和 serializeArray 会做一个帖子的!

        3
  •  0
  •   Everett    12 年前

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

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