关于jquery.param()的疑问
昨天一个功能需要传3个对象数据到后台,我想法是创建一个对象,然后取数据时实例化3个对象,然后把3个对象放在数组里,使用$.param() 序列化成字符串后传到后台。
按照自己的写法时字符串是一串undefined. 于是查了API和别人的写法, 在一篇博客里发现一个写发很相似:
var myObject=[{"name":"name","value":"leo"},{"name":"age","value":19}];
myObject.push({"name":"sex","value":"male"});
var result = $.param(myObject);
//结果:name=leo&age=19&sex=male.
从写法表面看上去这个数组是传了2个对象,实际param得出的一个对象, 那么这个时候我就不明白param的意图了,如果想传3个对象呢? 打开了jquery的源码也没能得出想要的答案,大家碰到这种要求怎么实现呢?
------解决方案--------------------$.param是将对象参数化,使用特别灵活,直接上代码吧:
直接传递一个obj,直接转化成key=value然后用&连接起来了
$.param({name:'bill',age:18});
结果:name=bill&age=18
这里的{X:Y,A:B}会变成X=Y&A=B的格式
或者name value键值对组成的数组,这个好说,name=value然后用&拼起来
$.param([
{name:'name',value:'bill'},
{name:'age',value:18}
]);
结果:name=bill&age=18
这里的name:'name'两个name是不同的,name value是固定格式
这里的{name:XXX,value:YYY} 会变成XXX=YYY的格式,比起上面的写法,显得更啰嗦
当name出现相同的时候
$.param([
{name:'name',value:'bill'},
{name:'name',value:'tom'}
]);
结果:name=bill&name=tom
这样的话,有些后端语言是取不到两个name的
但如果这样呢?
$.param([
{
name:'name',
value:['bill','tom']
}
]);
结果:name=tom,bill
居然用逗号把value接起来了,好吧,后端分割开也行
用传递一个obj的方法呢?
$.param({
name:['bill','tom'],
age:[18,19],
sex:["male","female"]
});
结果:name[]=bill&name[]=tom&age[]=18&age[]=19&sex[]=male&sex[]=female
name,age,sex被自动加上中括号了,
对于php来说,$_REQUEST['name'],$_REQUEST['age'],$_REQUEST['sex']都是array了
对应好下角标,3个person的信息就传递过来了
换成第二种固定格式:
$.param([
{name:'name',value:['bill','tom']},
{name:"age",value:[18,19]},
{name:"sex",value:["male","female"]}
])
结果:name=bill,tom&age=18,19&sex=male,female
至于你要哪种方案,自己选吧。