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 未结束的字符串常量常见解决方法
Jan 24 Javascript
『JavaScript』限制Input只能输入数字实现思路及代码
Apr 22 Javascript
JS简单操作select和dropdownlist实例
Nov 26 Javascript
使用JS画图之点、线、面
Jan 12 Javascript
原生js实现模拟滚动条
Jun 15 Javascript
apply和call方法定义及apply和call方法的区别
Nov 15 Javascript
JavaScript实现ASC转汉字及汉字转ASC的方法
Jan 23 Javascript
BootStrap智能表单demo示例详解
Jun 13 Javascript
JavaScript跨域调用基于JSON的RESTful API
Jul 09 Javascript
ajax前台后台跨域请求处理方式
Feb 08 Javascript
js神秘的电报密码 哈弗曼编码实现
Sep 10 Javascript
javascript实现前端成语点击验证优化
Jun 24 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
php中实现用数组妩媚地生成要执行的sql语句
2015/07/10 PHP
对比分析php中Cookie与Session的异同
2016/02/19 PHP
PHP二维数组去重算法
2016/12/17 PHP
PHP getName()函数讲解
2019/02/03 PHP
jquery 必填项判断表单是否为空的方法
2008/09/14 Javascript
js动态控制table的tr、td增加及删除的具体实现
2014/04/30 Javascript
浅析webapp框架AngularUI的demo
2014/12/21 Javascript
JavaScript实现的双向跨域插件分享
2015/01/31 Javascript
JS判断元素是否在数组内的实现代码
2016/03/30 Javascript
JS组件Bootstrap实现图片轮播效果
2016/05/16 Javascript
支持移动端原生js轮播图
2017/02/16 Javascript
bootstrap table实现x-editable的行单元格编辑及解决数据Empty和支持多样式问题
2017/08/10 Javascript
vue2.0设置proxyTable使用axios进行跨域请求的方法
2017/10/19 Javascript
jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法
2017/12/24 jQuery
js使用formData实现批量上传
2020/03/27 Javascript
使用kbone解决Vue项目同时支持小程序问题
2019/11/08 Javascript
微信小程序实现单个卡片左滑显示按钮并防止上下滑动干扰功能
2019/12/06 Javascript
基于JS实现视频上传显示进度条
2020/05/12 Javascript
Vue 使用typescript如何优雅的调用swagger API
2020/09/01 Javascript
python的类变量和成员变量用法实例教程
2014/08/25 Python
详解Python中for循环是如何工作的
2017/06/30 Python
python利用requests库模拟post请求时json的使用教程
2018/12/07 Python
python 进程间数据共享multiProcess.Manger实现解析
2019/09/23 Python
VSCode基础使用与VSCode调试python程序入门的图文教程
2020/03/30 Python
Python中无限循环需要什么条件
2020/05/27 Python
DataFrame 数据合并实现(merge,join,concat)
2020/06/14 Python
CSS3地图动态实例代码(圆圈向外扩散)
2018/06/15 HTML / CSS
HTML5之WebGL 3D概述(下)—借助类库开发及框架介绍
2013/01/31 HTML / CSS
英国男士时尚网站:Dandy Fellow
2018/02/09 全球购物
艺术系应届生的自我评价
2013/10/19 职场文书
医院实习介绍信
2014/01/12 职场文书
2019年“我为祖国点赞”演讲稿(3篇)
2019/09/26 职场文书
聊聊pytorch测试的时候为何要加上model.eval()
2021/05/23 Python
新手入门Mysql--sql执行过程
2021/06/20 MySQL
“鬼灭之刃”热度不减,其成功背后的原因是什么?
2022/03/22 日漫
Kubernetes控制节点的部署
2022/04/01 Servers