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 相关文章推荐
使用户点击后退按钮使效三行代码
Jul 07 Javascript
ASP SQL防注入的方法
Dec 25 Javascript
用jquery设置按钮的disabled属性的实现代码
Nov 28 Javascript
jQuery中triggerHandler()方法用法实例
Jan 19 Javascript
JS获取当前页面名称的简单实例
Aug 19 Javascript
JS判断输入的字符串是否是数字的方法(正则表达式)
Nov 29 Javascript
js获取一组日期中最近连续的天数
May 25 Javascript
vue2.0全局组件之pdf详解
Jun 26 Javascript
理解Angular的providers给Http添加默认headers
Jul 04 Javascript
vue如何获取点击事件源的方法
Aug 10 Javascript
详解Vue中数组和对象更改后视图不刷新的问题
Sep 21 Javascript
vue+canvas实现拼图小游戏
Sep 18 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用ini_get获取php.ini里变量值的方法
2015/03/04 PHP
Yii CGridView用法实例详解
2016/07/12 PHP
PHP微信红包生成代码分享
2016/10/06 PHP
php实现头像上传预览功能
2017/04/27 PHP
javascript firefox不显示本地预览图片问题的解决方法
2008/11/12 Javascript
Google Dart编程语法和基本类型学习教程
2013/11/27 Javascript
JS+CSS实现可拖动的弹出提示框
2015/02/16 Javascript
JavaScript实现自动变换表格边框颜色
2015/05/08 Javascript
jquery实现刷新随机变化样式特效(tag标签样式)
2017/02/03 Javascript
微信小程序使用Socket的实例
2017/09/19 Javascript
JS实现字符串去重及数组去重的方法示例
2018/04/21 Javascript
JavaScript学习笔记之图片库案例分析
2019/01/08 Javascript
jQuery简单实现根据日期计算星期几的方法
2019/01/09 jQuery
vue实现的网易云音乐在线播放和下载功能案例
2019/02/18 Javascript
仿vue-cli搭建属于自己的脚手架的方法步骤
2019/04/17 Javascript
vue input标签通用指令校验的实现
2019/11/05 Javascript
Vue 实现创建全局组件,并且使用Vue.use() 载入方式
2020/08/11 Javascript
Vue实现手机计算器
2020/08/17 Javascript
[01:03]PWL开团时刻DAY6——别打我
2020/11/05 DOTA
python实现文件名批量替换和内容替换
2014/03/20 Python
使用rst2pdf实现将sphinx生成PDF
2016/06/07 Python
用Python设计一个经典小游戏
2017/05/15 Python
Python实现模拟登录网易邮箱的方法示例
2018/07/05 Python
浅谈python3发送post请求参数为空的情况
2018/12/28 Python
Django 配置多站点多域名的实现步骤
2019/05/17 Python
opencv python 图片读取与显示图片窗口未响应问题的解决
2020/04/24 Python
PyTorch-GPU加速实例
2020/06/23 Python
详解Python中list[::-1]的几种用法
2020/11/16 Python
日本乐天德国站:Rakuten.de
2019/05/16 全球购物
一组SQL面试题
2016/02/15 面试题
职业教育毕业生求职信
2013/11/09 职场文书
单位刻章介绍信范文
2014/01/11 职场文书
酒店总经理职务说明书
2014/02/26 职场文书
不服从公司安排检讨书
2014/09/24 职场文书
教师党员学习群众路线心得体会
2014/11/04 职场文书
python实现一个简单的贪吃蛇游戏附代码
2022/06/28 Python