关于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的源码也没能得出想要的答案,大家碰到这种要求怎么实现呢?

...全文
238 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个{},...........
什么是SWFUpload?   SWFUpload是一个客户端文件上传工具,最初由Vinterwebb.se开发,它通过整合Flash与JavaScript技术为WEB开发者提供了一个具有丰富功能继而超越传统标签的文件上传模式。 [编辑本段]SWFUpload的主要特点   * 可以同时上传多个文件;   * 类似AJAX的无刷新上传;   * 可以显示上传进度;   * 良好的浏览器兼容性;   * 兼容其他JavaScript库 (例如:jQuery, Prototype等);   * 支持Flash 8和Flash 9;   SWFUpload不同于其他基于Flash构建的上传工具,它有着优雅的代码设计,开发者可以利用XHTML、CSS和JavaScript来随心所欲的定制它在浏览器下的外观;它还提供了一组简明的JavaScript事件,借助它们开发者可以方便的在文件上传过程中更新页面内容来营造各种动态效果。   在使用SWFUpload之前,请确认你具备一定的JavaScript和DOM知识。在实际开发中,大部分的错误都是由于错误的设置和低劣的Event Handlers处理程序所造成的。 [编辑本段]文档中文翻译   http://www.v-sky.com/doc/swfupload/v2.1.0/Documentation.html [编辑本段]效果演示   * Classic Form Demo http://demo.swfupload.org/formsdemo ;   * Features Demo http://demo.swfupload.org/featuresdemo ;   * Application Demo http://demo.swfupload.org/applicationdemo ;   * v1.0.2 Plugin Demo http://demo.swfupload.org/v102demo ; [编辑本段]选择合适的Flash控件   在发行包(SWFUpload v2)中含有2个版本的Flash控件(swfupload_f8.swf 与wfupload_f9.swf),其中第一个版本拥有最佳的兼容性,但是为此损失了部分功能;而第二个版本提供了一些附加的功能但是损失了兼容性。 [编辑本段]SWFUpload的初始化与配置   首先,在页面中引用SWFUpload.js ,如      然后,初始化SWFUpload ,如   var swfu;   window.onload = function () {   swfu = new SWFUpload({   upload_url : "http://www.swfupload.org/upload.php",   flash_url : "http://www.swfupload.org/swfupload_f9.swf", file_size_limit : "20480"   });   };   以下是一个标准的SWFUpload初始化设置所需的参数,你可以根据需要自己进行删减:   {   upload_url : "http://www.swfupload.org/upload.php", 处理上传请求的服务器端脚本URL   file_post_name : "Filedata", 是POST过去的$_FILES的数组名   post_params : {   "post_param_name_1" : "post_param_value_1",   "post_param_name_2" : "post_param_value_2",   "post_param_name_n" : "post_param_value_n"   },   file_types : "*.jpg;*.gif", 允许上传的文件类型   file_types_description: "Web Image Files", 文件类型描述   file_size_limit : "1024", 上传文件体积上限,单位MB   file_upload_limit : 10, 限定用户一次性最多上传多少个文件,在上传过程中,该数字会累加,如果设置为“0”,则表示没有限制   file_queue_limit : 2, 上传队列数量限制,该项通常不需设置,会根据file_upload_limit自动赋值   fl

87,996

社区成员

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

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