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弹幕效果
May 06 jQuery
jQuery操作DOM_动力节点Java学院整理
Jul 04 jQuery
jQuery制作input提示内容(兼容IE8以上)
Jul 05 jQuery
基于jQuery实现手风琴菜单、层级菜单、置顶菜单、无缝滚动效果
Jul 20 jQuery
简单实现jQuery轮播效果
Aug 18 jQuery
jquery实现限制textarea输入字数的方法
Sep 06 jQuery
jQuery实现切换隐藏与显示同时切换图标功能
Oct 29 jQuery
jquery写出PC端轮播图实例
Jan 26 jQuery
JQuery元素快速查找与操作
Apr 22 jQuery
jquery操作select常见方法大全【7种情况】
May 28 jQuery
jQuery实现全选、反选和不选功能的方法详解
Dec 04 jQuery
js与jquery获取input输入框中的值实例讲解
Feb 27 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
解析:使用php mongodb扩展时 需要注意的事项
2013/06/18 PHP
奉献出一个封装的curl函数 便于调用(抓数据专用)
2013/07/22 PHP
phpQuery让php处理html代码像jQuery一样方便
2015/01/06 PHP
thinkPHP实现基于ajax的评论回复功能
2018/06/22 PHP
PHP实现简单计算器小程序
2020/08/28 PHP
jsTree 基于JQuery的排序节点 Bug
2011/07/26 Javascript
jQuery EasyUI API 中文文档 可调整尺寸
2011/09/29 Javascript
如何制作浮动广告 JavaScript制作浮动广告代码
2012/12/30 Javascript
js、css、img等浏览器缓存问题的2种解决方案
2013/10/23 Javascript
用js+iframe形成页面的一种遮罩效果的具体实现
2013/12/31 Javascript
js实现图片无缝滚动特效
2020/03/19 Javascript
Bootstrap+jfinal退出系统弹出确认框的实现方法
2016/05/30 Javascript
jQuery实现元素的插入
2017/02/27 Javascript
老生常谈javascript中逻辑运算符&amp;&amp;和||的返回值问题
2017/04/13 Javascript
JavaScript瀑布流布局实现代码
2017/05/06 Javascript
Vue.js实现按钮的动态绑定效果及实现代码
2017/08/21 Javascript
js阻止默认右键的下拉菜单方法
2018/01/02 Javascript
jQuery的Ajax接收java返回数据方法
2018/08/11 jQuery
React Native中Mobx的使用方法详解
2018/12/04 Javascript
使用cx_freeze把python打包exe示例
2014/01/24 Python
Pycharm新建模板默认添加个人信息的实例
2019/07/15 Python
Python调用C语言的实现
2019/07/26 Python
使用tensorflow实现矩阵分解方式
2020/02/07 Python
pytorch ImageFolder的覆写实例
2020/02/20 Python
Python嵌入C/C++进行开发详解
2020/06/09 Python
基于CSS3的animation属性实现微信拍一拍动画效果
2020/06/22 HTML / CSS
奥林匹亚体育:Olympia Sports
2020/12/30 全球购物
竞争性谈判邀请书
2014/02/06 职场文书
yy生日主持词
2014/03/20 职场文书
战友聚会策划方案
2014/06/13 职场文书
自我查摆剖析材料
2014/10/11 职场文书
2015年检验员工作总结范文
2015/04/30 职场文书
python生成随机数、随机字符、随机字符串
2021/04/06 Python
java调用Restful接口的三种方法
2021/08/23 Java/Android
使用 Apache 反向代理的设置技巧
2022/01/18 Servers
win10系统xps文件怎么打开?win10打开xps文件的两种操作方法
2022/07/23 数码科技