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 相关文章推荐
使用TextRange获取输入框中光标的位置的代码
Mar 08 Javascript
js相册效果代码(点击创建即可)
Apr 16 Javascript
javascript break指定标签打破多层循环示例
Jan 20 Javascript
Chrome下ifame父窗口调用子窗口的问题示例探讨
Mar 17 Javascript
JS实现在页面随时自定义背景颜色的方法
Feb 27 Javascript
浅析JavaScript中的array数组类型系统
Jul 18 Javascript
node.js程序作为服务并在windows下开机自启动(用forever)
Mar 29 Javascript
使用 Vue 绑定单个或多个 Class 名的实例代码
Jan 08 Javascript
小程序日历控件使用方法详解
Dec 29 Javascript
小程序页面动态配置实现方法
Feb 05 Javascript
layui 上传插件 带预览 非自动上传功能的实例(非常实用)
Sep 23 Javascript
Axios代理配置及封装响应拦截处理方式
Apr 07 Vue.js
理解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中最简单的字符串匹配算法
2014/12/16 PHP
PHP之预定义接口详解
2015/07/29 PHP
php求今天、昨天、明天时间戳的简单实现方法
2016/07/28 PHP
javascript 表单验证常见正则
2009/09/28 Javascript
让你的网站可编辑的实现js代码
2009/10/19 Javascript
jquery.ui.draggable中文文档(原文翻译)
2013/11/15 Javascript
javascript实现网页背景烟花效果的方法
2015/08/06 Javascript
Nginx上传文件全部缓存解决方案
2015/08/17 Javascript
基于JS代码实现导航条弹出式悬浮菜单
2016/06/17 Javascript
原生JavaScript实现AJAX、JSONP
2017/02/07 Javascript
Android中Okhttp3实现上传多张图片同时传递参数
2017/02/18 Javascript
React-router 4 按需加载的实现方式及原理详解
2017/05/25 Javascript
实例分析js事件循环机制
2017/12/13 Javascript
NodeJs form-data格式传输文件的方法
2017/12/13 NodeJs
JS实现的简单下拉框联动功能示例
2018/05/11 Javascript
如何从0开始用node写一个自己的命令行程序
2018/12/29 Javascript
解决vue.js中settimeout遇到的问题(时间参数短效果不稳定)
2020/07/21 Javascript
解决vue组件没显示,没起作用,没报错,但该显示的组件没显示问题
2020/09/02 Javascript
python搭建简易服务器分析与实现
2012/12/15 Python
在Python中使用matplotlib模块绘制数据图的示例
2015/05/04 Python
Python中psutil的介绍与用法
2019/05/02 Python
经济实惠的豪华家具:My-Furniture
2019/03/12 全球购物
Noon埃及:埃及在线购物
2019/11/26 全球购物
一套Java笔试题
2016/08/20 面试题
市场营销专业毕业生自荐信
2013/11/02 职场文书
水污染治理专业毕业生推荐信
2013/11/14 职场文书
应届生新闻编辑求职信
2013/11/19 职场文书
经贸日语专业个人求职信
2013/12/13 职场文书
主持人演讲稿范文
2013/12/28 职场文书
挂职思想汇报
2013/12/31 职场文书
三严三实对照检查材料范文
2014/09/23 职场文书
八年级作文之我的母亲
2019/12/10 职场文书
elasticSearch-api的具体操作步骤讲解
2021/06/28 Java/Android
动画「半妖的夜叉姬」新BD特典图公开
2022/03/22 日漫
Win11显卡控制面板打开显卡设置方法
2022/04/20 数码科技
hive数据仓库新增字段方法
2022/06/25 数据库