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 相关文章推荐
javascript事件模型代码
Jul 01 Javascript
基于jquery的direction图片渐变动画效果
May 24 Javascript
javascript针对DOM的应用实例(一)
Apr 15 Javascript
jQuery 1.8 Release版本发布了
Aug 14 Javascript
JS限制Textarea文本域字符个数的具体实现
Aug 02 Javascript
ie8本地图片上传预览示例代码
Jan 12 Javascript
JS封装cookie操作函数实例(设置、读取、删除)
Nov 17 Javascript
基于Bootstrap实现图片轮播效果
May 22 Javascript
NPM 安装cordova时警告:npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to
Dec 20 Javascript
详解angular ui-grid之过滤器设置
Jun 07 Javascript
vue指令v-html使用过滤器filters功能实例
Oct 25 Javascript
原生JavaScript实现随机点名表
Jan 14 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
基于mysql的论坛(5)
2006/10/09 PHP
swfupload 多文件上传实现代码
2008/08/27 PHP
php视频拍照上传头像功能实现代码分享
2015/10/08 PHP
php中的常用魔术方法汇总
2016/02/14 PHP
PHP实现小偷程序实例
2016/10/31 PHP
PHP数据库编程之MySQL优化策略概述
2017/08/16 PHP
使用 laravel sms 构建短信验证码发送校验功能
2017/11/06 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
JavaScript 学习笔记(六)
2009/12/31 Javascript
基于JQuery的多标签实现代码
2012/09/19 Javascript
JS Jquery 遍历,筛选页面元素 自动完成(实现代码)
2013/07/08 Javascript
js二维数组排序的简单示例代码
2014/01/24 Javascript
jQuery插件分享之分页插件jqPagination
2014/06/06 Javascript
用Jquery选择器计算table中的某一列某一行的合计
2014/08/13 Javascript
jQuery中的read和JavaScript中的onload函数的区别
2014/08/27 Javascript
jQuery的css()方法用法实例
2014/12/24 Javascript
javascript实现图像循环明暗变化的方法
2015/02/25 Javascript
vue 组件中slot插口的具体用法
2018/04/03 Javascript
利用Node.js批量抓取高清妹子图片实例教程
2018/08/02 Javascript
Python脚本暴力破解栅栏密码
2015/10/19 Python
在Python的Flask框架中构建Web表单的教程
2016/06/04 Python
Python实现抓取HTML网页并以PDF文件形式保存的方法
2018/05/08 Python
Python实现的对一个数进行因式分解操作示例
2019/06/27 Python
Python实现计算对象的内存大小示例
2019/07/10 Python
python判断单向链表是否包括环,若包含则计算环入口的节点实例分析
2019/10/23 Python
Python post请求实现代码实例
2020/02/28 Python
使用Python将图片转正方形的两种方法实例代码详解
2020/04/29 Python
python中JWT用户认证的实现
2020/05/18 Python
HTML5 CSS3新的WEB标准和浏览器支持
2009/07/16 HTML / CSS
卡拉威高尔夫官方网站:Callaway Golf
2020/09/16 全球购物
国庆节演讲稿
2014/05/27 职场文书
企业员工集体活动方案
2014/08/17 职场文书
个人房屋转让协议书范本
2014/10/26 职场文书
入党团支部推荐意见
2015/06/02 职场文书
拒绝盗图!教你怎么用python给图片加水印
2021/06/04 Python
关于Redis的主从复制及哨兵问题
2022/06/16 Redis