JQuery中Ajax()的data参数类型实例分析


Posted in Javascript onDecember 15, 2015

本文实例分析了JQuery中Ajax()的data参数类型。分享给大家供大家参考,具体如下:

前面简单分析介绍了《ajax中data传参的两种方式》,对于ajax参数传递方式有了初步的了解,这里就来进一步分析一下ajax中data参数的类型。

假如现在有这样一个表单,是添加元素用的。

<form id='addForm' action='UserAdd.action' type='post'>
  <label for='uname'>用户名</label>:<input type='text' name='uname' id='uname'><br>
  <label for='mobileIpt'>手机号:</label><input type='text' name='mobileIpt' id='mobileIpt'><br>
  <label for='birthday'>生日:</label><input type='text' name='birthday'><br>
  <input type='button' value='提交' onclick='addUser()'>
</form>

我们不想使用表单submit的方式添加这个元素,我们就想使用ajax提交。

以前我们是这样实现的:

function addUser(){
  var user = {
   uname:$("#uname").val(),
   mobileIpt:$("#mobileIpt").val(),
   birthday:$("#birthday").val()
  };
  $.ajax({
   url:'UserAdd.action',
   data:user,
   type:'post',
   dataType:'text',
   success:function(msg){
    if(msg=='1'){
     console.log('添加成功');
    }else{
     console.log('添加失败')
    }
   }
  })
}

这没有什么错,就是获取表单元素的值实在是太麻烦....这里只有三项,很多项的时候就废了....

直到有一天,我发现了jquery的serializeArray方法

序列化表格元素 (类似 '.serialize()' 方法) 返回 JSON 数据结构数据。

注意,此方法返回的是JSON对象而非JSON字符串。需要使用插件或者第三方库进行字符串化操作。

返回的JSON对象是由一个对象数组组成的,其中每个对象包含一个或两个名值对——name参数和value参数(如果value不为空的话)。

我们来试试看

$('#addForm').serializeArray();
//返回数据结构,是json数组,每个对像分别name和value为key,代表这个表单元素的name和value
[
 {"name":"uname","value":""},
 {"name":"mobileIpt","value":""}, 
 {"name":"birthday","value":""}
]

这个貌似用不上啊

我们使用JQuery.param()方法处理一下:

var arr = $('#addForm').serializeArray();
$.param(arr);
"uname=alice&mobileIpt=110&birthday=1983-05-12"

嘿这下符合我们的需求了吧,虽然不是json类型,但是至少可以作为data上传了。

这里我们可以直接在ajax的data处填上这个json数组,在jquery内部自己调用$.param()处理的。

我们来看下jquery.param()方法的说明:

返回值:StringjQuery.param(obj,[traditional])

将表单元素数组或者对象序列化。

参数:

obj,[traditional]

数组或jQuery对象会按照name/value对进行序列化,普通对象按照key/value对进行序列化。

traditional:是否使用传统的方式浅层序列化。

demo:

$.param({uanme:'vic',mobileIpt:'110',birthday:'2013-11-11'});
"uanme=vic&mobileIpt=110&birthday=2013-11-11"

看着说明,貌似也跟我们没关系啊,我们换一个json数组来看

$.param([{uanme:'vic'},{mobileIpt:'110'},{birthday:'2013-11-11'}]);
"undefined=&undefined=&undefined="

这个转换不成功了吧,为什么我们表单的那种数据能够成功转换成url参数呢?我们来看下jquery源码

//在ajax()方法中,对json类型的数据进行了$.param()处理
if ( s.data && s.processData && typeof s.data !== "string" ) {
 s.data = jQuery.param( s.data, s.traditional );
}
//param方法中
if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
  // Serialize the form elements
  jQuery.each( a, function() {
   add( this.name, this.value );
  });
 } else {
  // If traditional, encode the "old" way (the way 1.3.2 or older
  // did it), otherwise encode params recursively.
  for ( prefix in a ) {
   buildParams( prefix, a[ prefix ], traditional, add );
  }
 }

这下明白了吧,如果是json数据,那么挨个循环,只取他们的name属性和value属性拼接字符串。

如果是普通对象,循环该对象的属性,然后拼接字符串。

总结:

所以,本文要说的是,在jquery的ajax函数中,可以传入3种类型的数据
1.文本:"uname=alice&mobileIpt=110&birthday=1983-05-12"
2.json对象:{uanme:'vic',mobileIpt:'110',birthday:'2013-11-11'}
3.json数组:

[
 {"name":"uname","value":"alice"},
 {"name":"mobileIpt","value":"110"}, 
 {"name":"birthday","value":"2012-11-11"}
]

所以,我们可以一键获取表单并提交,非常方便。

补充:

其实提取表单数据的话只需要serialize()方法直接获取"uname=alice&mobileIpt=110&birthday=1983-05-12"这样的就可以了。

希望本文所述对大家jQuery程序设计有所帮助。

Javascript 相关文章推荐
js传值 判断
Oct 26 Javascript
PHP结合jQuery实现红蓝投票功能特效
Jul 22 Javascript
cocos2dx骨骼动画Armature源码剖析(三)
Sep 08 Javascript
用JS写的一个Ajax库(实例代码)
Aug 06 Javascript
Bootstrap模态框禁用空白处点击关闭
Oct 20 Javascript
微信小程序 实现拖拽事件监听实例详解
Nov 16 Javascript
你应该知道的几类npm依赖包管理详解
Oct 06 Javascript
bootstrap table sum总数量统计实现方法
Oct 29 Javascript
Vue响应式原理深入解析及注意事项
Dec 11 Javascript
vue-cli V3.0版本的使用详解
Oct 24 Javascript
JS实现根据详细地址获取经纬度功能示例
Apr 16 Javascript
uni app仿微信顶部导航条功能
Sep 17 Javascript
理解javascript闭包
Dec 15 #Javascript
jQuery检测滚动条是否到达底部
Dec 15 #Javascript
js实现根据身份证号自动生成出生日期
Dec 15 #Javascript
浅析javascript的return语句
Dec 15 #Javascript
轻松学习Javascript闭包函数
Dec 15 #Javascript
Javascript基于AJAX回调函数传递参数实例分析
Dec 15 #Javascript
javascript实现html页面之间参数传递的四种方法实例分析
Dec 15 #Javascript
You might like
Ajax PHP JavaScript MySQL实现简易无刷新在线聊天室
2016/08/17 PHP
Netbeans 8.2与PHP相关的新特性介绍
2016/10/08 PHP
PHP Post获取不到非表单数据的问题解决办法
2018/02/27 PHP
javascript 动态添加表格行
2006/06/22 Javascript
关于javascript document.createDocumentFragment()
2009/04/04 Javascript
jQuery 行级解析读取XML文件(附源码)
2009/10/12 Javascript
JavaScript 三种创建对象的方法
2009/10/16 Javascript
IE6下JS动态设置图片src地址问题
2010/01/08 Javascript
Jquery下判断Id是否存在的代码
2011/01/06 Javascript
JQuery validate插件Remote用法大全
2016/05/15 Javascript
深入理解requestAnimationFrame的动画循环
2016/09/20 Javascript
javascript实现用户点击数量统计
2016/12/25 Javascript
完美实现js选项卡切换效果(一)
2017/03/08 Javascript
jQuery插件zTree实现的基本树与节点获取操作示例
2017/03/08 Javascript
jQuery ajax实现省市县三级联动
2021/03/07 Javascript
JS实现选项卡效果的代码实例
2019/05/20 Javascript
nodejs中实现修改用户路由功能
2019/05/24 NodeJs
vue使用原生swiper代码实例
2020/02/05 Javascript
python中执行shell命令的几个方法小结
2014/09/18 Python
Python中列表元素转为数字的方法分析
2016/06/14 Python
python MySQLdb使用教程详解
2018/03/20 Python
python中的subprocess.Popen()使用详解
2019/12/25 Python
Python魔法方法 容器部方法详解
2020/01/02 Python
tensorflow入门:tfrecord 和tf.data.TFRecordDataset的使用
2020/01/20 Python
python argparse传入布尔参数false不生效的解决
2020/04/20 Python
Python参数传递机制传值和传引用原理详解
2020/05/22 Python
TensorFlow的环境配置与安装教程详解(win10+GeForce GTX1060+CUDA 9.0+cuDNN7.3+tensorflow-gpu 1.12.0+python3.5.5)
2020/06/22 Python
英国领先的男士美容护发用品公司:Mankind
2016/08/31 全球购物
巴西男士个人护理产品商店:SHOP4MEN
2017/08/07 全球购物
莫斯科的韩国化妆品店:Sifo
2019/12/04 全球购物
优秀毕业生推荐信范文
2014/03/07 职场文书
小学优秀班干部事迹材料
2014/05/25 职场文书
《学会看病》教学反思
2016/02/17 职场文书
导游词之山西关帝庙
2019/11/01 职场文书
2019年冬至:天冷暖人心的问候祝福语大全
2019/12/20 职场文书
python爬取某网站原图作为壁纸
2021/06/02 Python