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获取并操作iframe中元素的方法
Mar 21 Javascript
Jquery 动态生成表格示例代码
Dec 24 Javascript
原生javascript获取元素样式
Dec 31 Javascript
javascript制作幻灯片(360度全景图片)
Jul 28 Javascript
js判断空对象的实例(超简单)
Jul 26 Javascript
js完整倒计时代码分享
Sep 18 Javascript
react实现一个优雅的图片占位模块组件详解
Oct 30 Javascript
Vue 动态设置路由参数的案例分析
Apr 24 Javascript
详解angular脏检查原理及伪代码实现
Jun 08 Javascript
vue.js实现带日期星期的数字时钟功能示例
Aug 28 Javascript
angular实现input输入监听的示例
Aug 31 Javascript
在vant 中使用cell组件 定义图标该图片和位置操作
Nov 02 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
smarty自定义函数htmlcheckboxes用法实例
2015/01/22 PHP
ThinkPHP V2.2说明文档没有说明的那些事实例小结
2015/07/01 PHP
PHP实现获取某个月份周次信息的方法
2015/08/11 PHP
PHP 在数组中搜索给定的简单实例 array_search 函数
2016/06/13 PHP
微信推送功能实现方式图文详解
2019/07/12 PHP
js计算页面刷新的次数
2009/07/20 Javascript
js中访问html中iframe的文档对象的代码[IE6,IE7,IE8,FF]
2011/01/08 Javascript
图片无缝滚动代码(向左/向下/向上)
2013/04/10 Javascript
为什么Node.js会这么火呢?Node.js流行的原因
2014/12/01 Javascript
EasyUI中在表单提交之前进行验证
2016/07/19 Javascript
自定义require函数让浏览器按需加载Js文件
2016/11/24 Javascript
js移动端图片压缩上传功能
2020/08/18 Javascript
基于D3.js实现时钟效果
2018/07/17 Javascript
vue2.x集成百度UEditor富文本编辑器的方法
2018/09/21 Javascript
微信小程序中遇到的iOS兼容性问题小结
2018/11/14 Javascript
vue 组件销毁并重置的实现
2020/01/13 Javascript
移动端JS实现拖拽两种方法解析
2020/10/12 Javascript
Vue与React的区别和优势对比
2020/12/18 Vue.js
[05:07]DOTA2英雄梦之声_第14期_暗影恶魔
2014/06/20 DOTA
python3编码问题汇总
2016/09/06 Python
利用python3随机生成中文字符的实现方法
2017/11/24 Python
Pandas 对Dataframe结构排序的实现方法
2018/04/10 Python
python使用mitmproxy抓取浏览器请求的方法
2019/07/02 Python
Python+OpenCV实现旋转文本校正方式
2020/01/09 Python
基于HTML5 WebGL的3D机房的示例
2018/03/16 HTML / CSS
canvas像素点操作之视频绿幕抠图
2018/09/11 HTML / CSS
Canon佳能美国官方商店:购买数码相机、数码单反相机、镜头和打印机
2016/11/15 全球购物
吸烟检讨书2000字
2014/02/13 职场文书
《孙权劝学》教学反思
2014/04/23 职场文书
某某同志考察材料
2014/05/28 职场文书
学校开学标语
2014/10/06 职场文书
云南省召开党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
保洁员岗位职责
2015/02/04 职场文书
爱晚亭导游词
2015/02/09 职场文书
初中班主任教育随笔
2015/08/15 职场文书
公司趣味运动会开幕词
2016/03/04 职场文书