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 相关文章推荐
jQuery 工具函数学习资料
Apr 29 Javascript
js null,undefined,字符串小结
Aug 21 Javascript
JS获取键盘上任意按键的值(实例代码)
Nov 12 Javascript
jQuery学习之prop和attr的区别示例介绍
Nov 15 Javascript
jQuery实现滚动鼠标放大缩小图片的方法(附demo源码下载)
Mar 05 Javascript
JavaScript学习小结之被嫌弃的eval函数和with语句实例详解
Aug 01 Javascript
jQuery中$.grep() 过滤函数 数组过滤
Nov 22 Javascript
js中常用的Math方法总结
Jan 12 Javascript
JS判断指定dom元素是否在屏幕内的方法实例
Jan 23 Javascript
在vue中动态添加class类进行显示隐藏实例
Nov 09 Javascript
webpack优化之代码分割与公共代码提取详解
Nov 22 Javascript
vue实现图片上传到后台
Jun 29 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
香妃
2021/03/03 冲泡冲煮
PHP实现时间轴函数代码
2011/10/08 PHP
php实现生成验证码实例分享
2016/04/10 PHP
使用PHPExcel导出Excel表
2018/09/08 PHP
PHP实现简单登录界面
2019/10/23 PHP
十个迅速提升JQuery性能让你的JQuery跑得更快
2012/12/10 Javascript
jquery实现checkbox 全选/全不选的通用写法
2014/02/22 Javascript
nodejs中使用monk访问mongodb
2014/07/06 NodeJs
JavaScript:Date类型全面解析
2016/05/19 Javascript
bootstrap table实现点击翻页功能 可记录上下页选中的行
2017/09/28 Javascript
Angular4自制一个市县二级联动组件示例
2017/11/21 Javascript
浅谈React高阶组件
2018/03/28 Javascript
详解javascript中的Error对象
2019/04/25 Javascript
浅谈layui使用模板引擎动态渲染元素要注意的问题
2019/09/14 Javascript
vue项目或网页上实现文字转换成语音播放功能
2020/06/09 Javascript
React冒泡和阻止冒泡的应用详解
2020/08/18 Javascript
解决vue安装less报错Failed to compile with 1 errors的问题
2020/10/22 Javascript
Python程序员面试题 你必须提前准备!(答案及解析)
2018/01/23 Python
Python学习笔记之图片人脸检测识别实例教程
2019/03/06 Python
解决python彩色螺旋线绘制引发的问题
2019/11/23 Python
python创建ArcGIS shape文件的实现
2019/12/06 Python
Python 调用有道翻译接口实现翻译
2020/03/02 Python
Django 解决distinct无法去除重复数据的问题
2020/05/20 Python
python语言的优势是什么
2020/06/17 Python
浅谈matplotlib 绘制梯度下降求解过程
2020/07/12 Python
html5使用canvas绘制文字特效
2014/12/15 HTML / CSS
美国CVS药店官网:CVS Pharmacy
2018/07/26 全球购物
英国时尚首饰品牌:Missoma
2020/06/29 全球购物
毕业实习个人鉴定范文
2013/12/10 职场文书
党员学习中共十八大思想报告
2014/09/12 职场文书
局领导领导班子四风对照检查材料
2014/09/27 职场文书
雷锋之歌观后感
2015/06/10 职场文书
合同范本之电脑出租
2019/08/13 职场文书
Matplotlib可视化之添加让统计图变得简单易懂的注释
2021/06/11 Python
如何使用SQL Server语句创建表
2022/04/12 SQL Server
python热力图实现的完整实例
2022/06/25 Python