昨天一个功能需要传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的源码也没能得出想要的答案,大家碰到这种要求怎么实现呢?   

解决方案 »

  1.   

    我目前的做法就是把这些数据先放在数组里,使用join()拼接成字符传,传到后台方便解析。
      

  2.   


    这种写法就是说看上去是3个对象,其实保存的数据就是一条。我的想法就是如果有3个Person对象要传后台呢?
      

  3.   

    jquery应该是做了转换,后台是通过数组接收的。
      

  4.   

    $.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至于你要哪种方案,自己选吧。