关于jquery.param()的疑问

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

...全文
237 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
garfieldzf 2013-10-15
  • 打赏
  • 举报
回复
我目前的做法就是把这些数据先放在数组里,使用join()拼接成字符传,传到后台方便解析。
garfieldzf 2013-10-15
  • 打赏
  • 举报
回复
引用 5 楼 l676331991 的回复:
$.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 至于你要哪种方案,自己选吧。
好的,多谢。
l676331991 2013-10-15
  • 打赏
  • 举报
回复
$.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 至于你要哪种方案,自己选吧。
lzh_me 2013-10-15
  • 打赏
  • 举报
回复
jquery应该是做了转换,后台是通过数组接收的。
garfieldzf 2013-10-15
  • 打赏
  • 举报
回复
引用 2 楼 u011461314 的回复:
不明白你说什么。明明是3个{},...........
这种写法就是说看上去是3个对象,其实保存的数据就是一条。 我的想法就是如果有3个Person对象要传后台呢?
zhjdg 2013-10-15
  • 打赏
  • 举报
回复
不明白你说什么。明明是3个{},...........

87,996

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧