日期:2014-05-16  浏览次数:20357 次

关于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

至于你要哪种方案,自己选吧。