jQuery.Ajax()的data参数类型详解


Posted in jQuery onJuly 23, 2017

假如现在有这样一个表单,是添加元素用的。

<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.Ajax()的data参数类型详解,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

jQuery 相关文章推荐
jQuery自定义图片上传插件实例代码
Apr 04 jQuery
原生js jquery ajax请求以及jsonp的调用方法
Aug 04 jQuery
jQuery实现全选、反选和不选功能
Aug 16 jQuery
jQuery EasyUI结合zTree树形结构制作web页面
Sep 01 jQuery
jQuery EasyUI 折叠面板accordion的使用实例(分享)
Dec 25 jQuery
jquery 给动态生成的标签绑定事件的几种方法总结
Feb 24 jQuery
浅谈jquery fullpage 插件增加头部和版权的方法
Mar 20 jQuery
jQuery实现的点击按钮改变样式功能示例
Jul 21 jQuery
jQuery each和js forEach用法比较
Feb 27 jQuery
jQuery操作attr、prop、val()/text()/html()、class属性
May 23 jQuery
基于jquery实现彩色投票进度条代码解析
Aug 26 jQuery
jquery实现广告上下滚动效果
Mar 04 jQuery
JavaScript之事件委托实例(附原生js和jQuery代码)
Jul 22 #jQuery
浅谈事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流
Jul 22 #jQuery
JQuery和html+css实现带小圆点和左右按钮的轮播图实例
Jul 22 #jQuery
js案例之鼠标跟随jquery版(实例讲解)
Jul 21 #jQuery
基于jQuery实现手风琴菜单、层级菜单、置顶菜单、无缝滚动效果
Jul 20 #jQuery
jQuery实现可编辑表格并生成json结果(实例代码)
Jul 19 #jQuery
jQuery实现导航栏头部菜单项点击后变换颜色的方法
Jul 19 #jQuery
You might like
动漫女神老婆无限好,但日本女生可能就不是这么一回事了!
2020/03/04 日漫
php sprintf()函数让你的sql操作更安全
2008/07/23 PHP
php getimagesize 上传图片的长度和宽度检测代码
2010/05/15 PHP
php下利用curl判断远程文件是否存在的实现代码
2011/10/08 PHP
开源php中文分词系统SCWS安装和使用实例
2014/04/11 PHP
解析PHP之提取多维数组指定列的方法
2017/01/03 PHP
PHP让网站移动访问更加友好方法
2019/02/14 PHP
根据邮箱的域名跳转到相应的登录页面的代码
2012/02/27 Javascript
Js 冒泡事件阻止实现代码
2013/01/27 Javascript
JavaScript/Js脚本处理html元素的自定义属性解析(亲测兼容Firefox与IE)
2013/11/25 Javascript
jQuery 文本框得失焦点的简单实例
2014/02/19 Javascript
javascript中html字符串转化为jquery dom对象的方法
2015/08/27 Javascript
JS实现超简单的仿QQ折叠菜单效果
2015/09/21 Javascript
微信小程序 开发指南详解
2016/09/27 Javascript
谈谈第三方App接入微信登录 解读
2016/12/27 Javascript
BootStrap CSS全局样式和表格样式源码解析
2017/01/20 Javascript
基于jQuery实现的单行公告活动轮播效果
2017/08/23 jQuery
vue-cli 自定义指令directive 添加验证滑块示例
2017/10/19 Javascript
JavaScript实现JSON合并操作示例【递归深度合并】
2018/09/07 Javascript
解析JS在获取当前月的最后一天遇到的坑
2019/08/30 Javascript
[01:11:02]Secret vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
[01:14:19]NAVI vs Mineski 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
Python3.5 创建文件的简单实例
2018/04/26 Python
python多任务及返回值的处理方法
2019/01/22 Python
Python中字符串与编码示例代码
2019/05/20 Python
python函数声明和调用定义及原理详解
2019/12/02 Python
完美解决pycharm导入自己写的py文件爆红问题
2020/02/12 Python
python实现处理mysql结果输出方式
2020/04/09 Python
python3.8.1+selenium实现登录滑块验证功能
2020/05/22 Python
Python常用扩展插件使用教程解析
2020/11/02 Python
CSS3中伪元素::before和::after的用法示例
2017/09/18 HTML / CSS
中学老师的自我评价
2013/11/07 职场文书
三年级学生评语
2014/04/23 职场文书
提取视频中的音频 Python只需要三行代码!
2021/05/10 Python
微信小程序实现聊天室功能
2021/06/14 Javascript
一次SQL如何查重及去重的实战记录
2022/03/13 MySQL