我在下面有一个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框架。如果您需要,我可以为您提供更多信息。
答案 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数据结构更多容易。