答案 0 :(得分:53)
从jQuery 1.4开始,
$.param()
方法递归地序列化深层对象,以适应现代脚本语言和框架,如PHP和Ruby on Rails。您可以通过设置jQuery.ajaxSettings.traditional = true;
来全局禁用此功能。
鉴于
var p = {foo: [1,2,3], bar: 42};
将traditional
设置为true
生成
foo=1&foo=2&foo=3&bar=42
虽然例如Python可以处理这些参数,即它为foo
生成一个列表,PHP只会考虑最后一个foo
参数。
但是现在默认情况下,序列化的结果是(实际上它是URI编码的)
foo[]=1&foo[]=2&foo[]=3&bar=42
如上所述,PHP和RoR可以更好地处理。
或许更有意思的是这个。给出:
var p = {foo: {1: [3,4], 2:2,3:3}, bar: 42};
传统产品:
foo=[object Object]&bar=42
与“新”方式相比显然无用:
foo[1][]=3&foo[1][]=4&foo[2]=2&foo[3]=3&bar=42