JQuery.Ajax()的data参数类型

光模块MCU开发全解析:从架构原理到固件调试实战 在高速光模块中,MCU并非传统印象里的核心处理器,而是负责数字诊断、闭环控制和协议管理的嵌入式管家。随着800G、1.6T模块的普及,MCU与DSP/SoC的协同、I2C总线通信、ADC采集、APC/TEC控制等低速域任务愈发关键。理解MCU的选型规格、启动流程和固件设计,是保障光模块稳定运行的基础。本文从光模块架构切入,剖析MCU的角色定位,详细拆解I2C从机实现、电芯片配置、校准与升级等工程细节,并结合实际调试经验梳理常见故障与排查思路,为嵌入式工程师提供一份可落地的光模块MCU开发指南。 阅读详情

JQuery.Ajax()的data参数类型

2017年9月14日:补充JQuery.Ajax()的数据类型

 

本文以前提到的三种类型,这三种参数本质上都是变成了类似“uname=alice&mobileIpt=110&birthday=1983-05-12“”这样的字符串。

除了这三种类型,还可以是:

4、JSON字符串,形如 

 {"name": "uname", "age": 18}

注意,这个地方不是json对象,是json字符串,字符串。这样,在后台就可以直接注入到对象中。

当你需要向后台提交一组对象时时,json字符串的好处就体现出来了(对象数组)。

一般都是用post方法传递参数。

写法:

1
2
3
4
5
6
7
8
9
$.ajax({
     type:  'post' ,
     url:  'aaa/bbb.do' ,
     contentType:  'application/json;charset=utf-8' ,
     data:  '{"name": "uname", "age": 18}' ,
     success:  function  (data) {  //返回json结果
         alert(data);
     }
});

  

5、FormData对象,它可以更灵活方便的发送表单数据,因为可以独立于表单使用。

最大的好处是可以通过Ajax上传文件。通过这种方式,可以非常方便的进行表单提交,也不需要下文提到的那种方法了,直接表单转换成FormData对象即可。

1
2
3
4
5
6
7
8
9
var  fd =  new  FormData(document.querySelector( "form" ));
fd.append( "CustomField" ,  "This is some extra data" );
$.ajax({
   url:  "stash.php" ,
   type:  "POST" ,
   data: fd,
   processData:  false ,   // 不处理数据
   contentType:  false    // 不设置内容类型
});

可以参考:https://developer.mozilla.org/zh-CN/docs/Web/API/FormData/Using_FormData_Objects

 

6.其他类型,比如html, 比如XML,只要设置要contentType即可,类似JSON类型

 —————————————————分割线—————————————————————————————

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

复制代码
<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提交。

以前我们是这样实现的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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方法(现在请使用FormData)

序列化表格元素 (类似 '.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"这样的就可以了。

 

分类:  Java学习
15
0
« 上一篇: 通过拖动表格行进行行排序
» 下一篇: windows下修改memcached服务的端口号
posted @  2014-08-12 23:40  尼玛范爷 阅读( 296515) 评论( 27)  编辑  收藏

  
#1楼   2014-08-13 00:45 |  轴轴   
非常感谢,正是我想要的功能.估计还会有其它类似的解决方案.
  
#2楼   2014-08-13 08:48 |  Gamain   
mark一下,谢谢分享。
  
#3楼 [ 楼主]  2014-08-13 09:09 |  尼玛范爷   
@ Gamain
@轴轴
感谢支持
  
#4楼   2014-08-13 09:12 |  清海扬波   
针对单选复选得到的值是怎么样的呢
  
#5楼   2014-08-13 09:18 |  写CODE没女朋友   
mark 一下
  
#6楼   2014-08-13 09:37 |  mrbenlearnjs   
mark,问下楼主见过js中这种写法没,i=len>>>0,三个大于号,不知有何用
  
#7楼 [ 楼主]  2014-08-13 10:14 |  尼玛范爷   
@ mrbenlearnjs
1
2
3
4
5
6
7
8
9
10
11
12
13
无符号右移运算符 (>>>)
右移表达式的位,不保留符号。
result = expression1 >>> expression2
参数
result  任何变量。
expression1 任何表达式。
expression2 任何表达式。
 
说明
>>> 运算符把 expression1 的各个位向右移 expression2 指定的位数。右移后左边空出的位用零来填充。移出右边的位被丢弃。例如:
var  temp
temp = -14 >>> 2
变量 temp 的值为 -14 (即二进制的 11111111 11111111 11111111 11110010),向右移两位后等于 1073741820 (即二进制的 00111111 11111111 11111111 11111100)。


javascript中还有很多这样的运算符,你可以参考下javascritp手册
  
#8楼 [ 楼主]  2014-08-13 10:43 |  尼玛范爷   
@ 清海扬波
表单:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
< form  id='form1'>
     < input  type='checkbox' name='hobby' value='0'>
     < input  type='checkbox' name='hobby' value='1'>
     < input  type='checkbox' name='hobby' value='2'>
     < input  type='radio' name='gender' value='0'  checked='checked'>
     < input  type='radio' name='gender' value='1'>
     < input  type='uname' name='uname'>
     < select  name='age'>
         < option  value='10'>10</ option >
         < option  value='11'>11</ option >
         < option  value='12'>12</ option >
         < option  value='13'>13</ option >
     </ select >
</ form >



通过serialize()方法获取到的数据是:
1
"hobby=0&hobby=1&hobby=2&gender=1&uname=&age=12"

需要注意的是,如果checkbox或者radio没有选中,取得的数据中是没有这一项的。
  
#9楼   2014-08-13 13:25 |  wenbolwm   
学习了,如果标签是禁用的话是取不到值的,有这样一个麻烦
  
#10楼 [ 楼主]  2014-08-13 13:43 |  尼玛范爷   
@ wenbolwm
disabled属性的本意就是不能提交,怎么可以说是麻烦呢?
  
#11楼   2014-08-13 16:38 |  吉喆吉   
正好using $.ajax(),文章和评论都学到了很多,怒赞
  
#12楼 [ 楼主]  2014-08-13 16:47 |  尼玛范爷   
@ 吉喆吉
谢谢
很高兴能给你带来帮助
  
#13楼   2014-08-13 20:48 |  wenbolwm   
@ 范海涛
引用 @wenbolwmdisabled属性的本意就是不能提交,怎么可以说是麻烦呢?

有时下拉框禁止用户选择,但值又要被提交到后台,有什么好的提交方法么?谢谢
  
#14楼 [ 楼主]  2014-08-14 16:52 |  尼玛范爷   
@ wenbolwm
我估计你的表单里的这个select应该是可以控制的,即,可能在触发了某些条件之后,该select可以解除禁用。
这样的话,我建议你动态的创建一个隐藏的<input type='hidden'>元素,其值为select的值。如果select解除禁用了,在删除该隐藏的input好了。
  
#15楼   2014-08-14 22:58 |  wenbolwm   
@ 范海涛
谢谢
  
#16楼   2014-08-14 23:43 |  Tinkerc   
Mark一下
  
#17楼   2015-09-06 09:40 |  pjcn   
分析的真好,帮我解决了一个大问题
  
#18楼 [ 楼主]  2015-09-07 01:33 |  尼玛范爷   
@ pjcn
哈哈哈,是嘛,那太好了
  
#19楼   2015-10-20 11:29 |  午夜钟魂   
赞,正在研究。这个data到底应该是什么类型的。受教了
  
#20楼   2016-03-22 13:28 |  贾雨阳   
1.var taskData = $("#addtaskForm").serializeArray();
2.var taskData = $("#addtaskForm").serialize();
$.ajax({
type:"post",
async:false,
data:taskData,
url:"page/taskAction_addTask.action",
error:function(){
alert("网络异常");
},
/* function(XMLHttpRequest, textStatus, errorThrown) {
alert(XMLHttpRequest.status);
alert(XMLHttpRequest.readyState);
alert(textStatus);
} ,*/
success:function(msg){
alert(msg);
}
});
form内容序列化,使用第一种方式后台无法获取数据,但是使用第二种可以获取数据。请求一下
  
#21楼 [ 楼主]  2016-03-25 11:30 |  尼玛范爷   
@ 贾雨阳
呵呵,真有意思,贴个http请求的信息吧
  
#22楼   2016-06-01 11:20 |  桃花衣旧笑春风   
mark 一下这种方法
  
#23楼   2017-05-08 11:39 |  奋斗的码农、   
学习了 谢谢
  
#24楼   2017-08-30 10:01 |  FancyAnnaYL   
From Data显示[object Object]:是正常现象吗?返回数据是null
  
#25楼   2017-09-14 11:33 |  飞翔的猪猪侠   
mark 学习了
  
#26楼   2017-11-09 20:08 |  莫棄   
谢楼主分享,帮了我一个大忙!!!
  
#27楼 [ 楼主]  2017-11-10 14:16 |  尼玛范爷   
@ 莫棄
很高兴能帮到你

QProgressBar:常用接口、样式表及自定义进度条实现 在Qt开发中,QProgressBar 是一个非常常用的控件,用于显示任务的进度。无论是文件下载、数据处理还是其他耗时操作,QProgressBar 都能直观地展示当前进度。本文将详细介绍QProgressBar 的使用方法,包括常用接口、样式表设置,并额外补充一个自定义进度条的C++实现。 阅读详情

相关推荐

在AutoDL的A100云服务器上,用Docker搞定Sapien+RobotWin环境(附完整conda list)

本文详细介绍了在AutoDL的A100云服务器上使用Docker构建Sapien+RobotWin环境的完整指南。通过配置Vulkan渲染管线、精确复现Conda环境以及解决常见问题,帮助研究人员高效搭建稳定的机器人仿真开发环境,特别适合需要高性能GPU加速的复杂仿真任务。

weixin_30689307的博客 431

jQuery Ajax 实例 详细介绍$.ajax、$.post、$.get的使用

jQuery Ajax 实例 详细介绍$.ajax、$.post、$.get的使用

乐杨俊浅谈LAMP 1万+

【Dify精讲】第2章:后端服务架构深度剖析

Dify后端采用Flask应用工厂模式实现模块化开发,通过蓝图架构将API分为控制台、Web应用和服务接口三大模块。其设计亮点包括:1) 应用工厂模式支持多环境配置和独立测试;2) 蓝图分层管理实现API模块化,各模块职责清晰;3) 严格遵循RESTful原则设计API接口;4) 使用Flask-RESTful扩展简化API开发。这种架构既保持了Flask的灵活性,又实现了企业级应用的可维护性,是Flask项目架构的优秀实践案例。

wiyi9891的专栏 2126

jq里的ajax超详细参数讲解

目录1、url:要发送请求的URL地址。2、type:请求的类型,可选参数,包括GET、POST、PUT、DELETE等,默认为GET。3、data:要发送到服务器的数据,可以是一个字符串、数组或对象。默认为null。4、dataType:从服务器返回的响应数据的类型,可选参数,括"xml"、"json"、"html"、"text"等,默认为智能猜测。5、contentType:发送请求的数据格式,可选参数, 默认为"application/x-www-form-urlencoded"。常用的还有"appl

php-yyds 3391

OpenBmc开发11:添加传感器(I2C)

1 查看传感器信息 通过qemu以本地端口映射方式运行编译后的镜像,访问bmcweb页面的网址是:https://localhost:2443/,如果想用IP地址启动请参考:openbmc开发4:启动运行编译镜像。(这里以网桥方式启动,以ip地址方式访问BMC) 输入用户名和密码,密码是:0penBmc(第一个是数字)。 选择Health,然后点击Sensor,可以看到传感器信息。 2 查看传感器配置文件 进入meta-live/meta-test/recipes-phosphor/...

master 1万+

实例讲解CANoe报文解析使用方法

在日常工作中,经常需要分析车辆产生故障的原因,在电动汽车中,分布式控制器及线束在其中某一个地方出现问题,就有可能造成车辆故障,但是由于电气零件无法直观的观察到哪个部位发生了故障,所以要借助工具测量电气变量或者采集报文信息通过分析,解析出故障原因,从而为车辆的开发,测试,维修提供支持。其中汽车行业最通用的通讯方式就是CAN通讯,本文针对使用CANoe对CAN报文离线分析的使用方法做详细介绍。

qq_43011586的博客 1万+

「jQuery系列」jQuery中Ajax的运用

jQuery Ajax 是 jQuery 提供的一个功能强大的异步通信方法,它允许网页与服务器之间进行数据交换,而无需重新加载整个页面。通过使用 Ajax,开发者可以实现更加流畅和响应式的用户体验,减少不必要的网络传输和页面加载时间。jQuery Ajax 的核心方法是$.ajax(),它提供了丰富的选项和回调函数,用于配置和执行 Ajax 请求。下面是一个基本的$.ajax()$.ajax({url: 'https://api.example.com/data', // 请求的 URL。

日常笔记/总结/系列知识梳理 4174

深度学习与西储大学轴承数据集(一)

西储大学数据集介绍

weixin_50642818的博客 1万+

jquery ajax中data属性详解

$.post、$.get是一些简单的方法,如果要处理复杂的逻辑,还是需要用到jQuery.ajax() 一、$.ajax的一般格式 $.ajax({ type: 'POST', url: url , data: data , success: success , dataType: dataType }); 二、$.ajax的参数描述 参数 描述

没有伞的孩子只能快跑,如若不跑,只有一个结果:超过你的人回头鄙视你 5万+

315、弱电基础知识介绍

常见的弱电系统包括:闭路电视监控系统、防盗报警系统、门禁系统、电子巡更系统、停车场管理系统、可视对讲系统、家庭智能化系统及安防系统、背景音乐系 统、LED显示系统、等离子拼接屏系统、DLP大屏系统、三表抄送系统、楼宇自控系统、防雷与接地系统、寻呼对讲及专业对讲系统、弱电管道系统、UPS不 间断电源系统、机房系统、综合布线系统、计算机局域网系统、物业管理系统、多功能会议室系统、有线电视系统、卫星电视系统、卫星通讯系统、消防系统、电话 通讯系统、酒店管理系统、视频点播系统、人力资源管理系统等等。

qq_43416206的博客 1365

YOLO11,ultralytics-main源代码目录结构详解

本文详细介绍了YOLO11框架的ultralytics-main源代码目录结构,帮助用户更好地理解和使用YOLO模型。主要目录包括:docker文件夹,包含多种Docker镜像文件,适用于不同硬件环境;docs文件夹,存放YOLO的说明文档;examples文件夹,提供YOLO使用的示例代码;tests文件夹,包含单元测试模块;ultralytics文件夹,为核心代码所在,包含推理逻辑、配置、数据处理等模块。其中,engine文件夹负责训练和推理引擎,models文件夹存放模型架构,nn定义神经网络结构

qq_30279827的博客 1282

jQuery 中的 Ajax 详解

众所周知,jQuery 是一个跨主流浏览器的 JavaScript 库,它封装了 JavaScript 的常用功能代码,简化了 HTML DOM 操作、事件处理、动画设计和 Ajax 交互等任务。jQuery 中的 Ajax 是对 XMLHttpRequest 或 ActiveXObject(IE9以下版本中)的封装,它提供了一种更加方便和强大的方式来与服务器进行数据交换,从而实现在不重新加载整个页面的情况下,对网页进行局部更新。

zz130428的博客 2123

DDD系列 - 第12讲 如何在DDD中实现Query服务(轻量化CQRS)

轻量化CQRS、整合Repository和DAO的优势。

罗小爬的技术宝书 266

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

jQuery.Ajax()的data参数类型详解发布时间:2020-10-14 22:06:34来源:脚本之家阅读:104作者:zhaoyizhilan假如现在有这样一个表单,是添加元素用的。用户名:手机号:生日:我们不想使用表单submit的方式添加这个元素,我们就想使用ajax提交。以前我们是这样实现的:function addUser(){var user = {uname:$("#unam...

weixin_39833454的博客 252

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ajax的data参数类型,JQuery.Ajax()的data参数类型实例详解

假如现在有这样一个表单,是添加元素用的。手机号:生日:我们不想使用表单submit的方式添加这个元素,我们就想使用ajax提交。以前我们是这样实现的:添加成功');}else{console.log('添加失败')}}})}这没有什么错,就是获取表单元素的值实在是太麻烦....这里只有三项,很多项的时候就废了....直到有一天,我发现了jquery的serializeArray方法序列化表格元素 ...

weixin_42501848的博客 272

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

jq中ajax传值的几种类型,JQuery中Ajax()的data参数类型实例分析

本文实例分析了JQuery中Ajax()的data参数类型。分享给大家供大家参考,具体如下:前面简单分析介绍了《ajax中data传参的两种方式》,对于ajax参数传递方式有了初步的了解,这里就来进一步分析一下ajax中data参数的类型。假如现在有这样一个表单,是添加元素用的。用户名:手机号:生日:我们不想使用表单submit的方式添加这个元素,我们就想使用ajax提交。以前我们是这样实现的:f...

weixin_39769627的博客 707

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

关于JQuery.Ajax()的data参数类型

转自:微点阅读https://www.weidianyuedu.com 假如现在有这样一个表单,是添加元素用的。 <form id="addForm" action="UserAdd.action" type="post"> <label for="uname">用户名</label>:<input type="text" name="uname" id="uname"><br> <label for="mobileIpt"&gt..

ysds20211402的博客 394

ajax的data参数类型,JQuery.Ajax()的data参数类型

假如现在有这样一个表单,是添加元素用的。用户名:手机号:生日:我们不想使用表单submit的方式添加这个元素,我们就想使用ajax提交。以前我们是这样实现的:123456789101112131415161718192021functionaddUser(){varuser = {uname:$("#uname").val(),mobileIpt:$("#mobileIpt").val(),b...

weixin_26985923的博客 238

Jquery.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

i_illusion的博客 474

JQuery.Ajax()的data参数类型分析

/返回数据结构,是json数组,每个对像分别name和value为key,代表这个表单元素的name和value[ {"name":"uname","value":""}, {"name":"mobileIpt","value":""}, {"name":"birthday","value":""}]

hdxx2022的博客 485
上一篇: jQuery ajax - param() 方法
下一篇: ajax的cache作用
javaPie
博客等级 码龄16年 1171粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值