详解Ajax请求(三)——jQuery对Ajax的实现及serialize()函数对于表单域控件参数提交的使用技巧
原生的Ajax对于异步请求的实现并不好用,特别是不同的浏览器对于Ajax的实现并不完全相同,这就意味着你使用原生的Ajax做异步请求要兼顾浏览器的兼容性问题,对于java程序员来讲这是比较头疼的事情,还好jQuery的出现帮我们解决了兼容性的问题,而且让异步请求的实现更加简单直观。
总结下来,jQuery对于Ajax的实现常用的方法一共有三个,分别是:$.ajax(),$.get(),$.post(),其中$.get()和$.post()方法分别是对$.ajax()方法的j简写。至于这三个方法的使用细节可以参考:http://www.w3school.com.cn/jquery/jquery_ref_ajax.asp。本文主要对使用jquery发送ajax时表单元素参数提交的技巧进行说明。
我们来看一个使用场景:
<input type="button" id="testBtn" value="测试按钮" onclick="sentAjax();"/><br>
<form action="" id = "formId">
<input type="text" name = 'name' id="NAME"/><br>
<input type="text" name = 'id' id="ID" /><br>
</form>
要求发送ajax请求时提交id为NAME和ID的表单元素我们先看一下传统的做法。
function sentAjax(){
var name = $("#NAME").val();
var id = $("#ID").val();
var sendData = "name=" + name + "&id=" + id;
$.ajax({
type: 'POST',
url:"<%=basePath%>/manage/test/ajax",
data: sendData,
success: function(getData){
}
});
}
我们发现使用传统的做法要对表单控件逐个进行取值并且还要进行字符串的拼接(当然,如果你data用的是json格式就不用进行字符串拼接了,但还是免不了逐个进行取值),我们再看看使用jquery的serialize()方法是怎么做的。
function sentAjax(){
var formParam = $("#formId").serialize();
alert(formParam);
$.ajax({
type: 'POST',
url:"<%=basePath%>/manage/test/ajax",
data: $("#formId").serialize(),
success: function(getData){
}
});
}

我们发现使用serialize()函数让我们免去了对表单控件逐个进行取值并且还要进行字符串的拼接的麻烦。serialize()函数底层对表单元素做了序列化的处理,同时serialize()函数允许我们选择一个或多个表单元素(比如 input 及/或 文本框),或者 form 元素本身。我们再来看看下面的应用场景
<input type="button" id="testBtn" value="测试按钮" onclick="sentAjax();"/><br> <form action="" id = "formId">
<input type="text" name = 'name' id="NAME"/><br>
<input type="text" name = 'id' id="ID" /><br>
<input type="checkbox" name="ck" value="1"/><br>
<input type="checkbox" name="ck" value="2"/><br>
<input type="checkbox" name="ck" value="3"/><br>
<input type="checkbox" name="ck" value="4"/><br>
</form>
要求发送ajax请求时提交已选中的name为'ck'的复选框,其它的表单元素不做提交。按照传统的做法代码我们要这么写。
function sentAjax(){
var selectedCheckbox = $(":checkbox[name=ck]:checked");
var sendDatas = "";
$.each(selectedCheckbox,function(index,item){
sendDatas += "&ck=" + item.value;
});
sendDatas = sendDatas.substring(1);
$.ajax({
type: 'POST',
url:"<%=basePath%>/manage/test/ajax",
data: sendDatas,
success: function(getData){
}
});
}
再来看看使用serialize()函数的做法,代码写起来就很简单。
function sentAjax(){
var sendDatas = $(":checkbox[name=ck]:checked").serialize();
$.ajax({
type: 'POST',
url:"<%=basePath%>/manage/test/ajax",
data: sendDatas,
success: function(getData){
}
});
}
这里提几点需要注意的,
(1)使用serialize()函数时,要序列化的表单元素不一定非要在<form></form>标签中,如果你只是要序列化某个<form></form>标签下的表单元素,其它<form></form>下的表单元素或者<form></form>外的表单元素不做序列化,就要使用以下的语句(注意冒号前面的空格不能少,这里用到了jQuery的层级选择器)。
var params = $("#formId :checkbox[name=ck]:checked").serialize();
(2):对于复选框(checkbox)使用serialize()函数进行序列化时,只能序列化被选中的复选框如下写法不能序列化未选中的复选框(这种写法序列化的也只能是选中的复选框,若是想发送ajax请求时提交未选中的的复选框,请参照传统的写法对所有的复选框按照checked属性进行过滤)。
var params = $("#formId :checkbox[name=ck]").serialize();
参考文章:http://www.w3school.com.cn/jquery/ajax_serialize.asp
最后说一点,我们作为程序员,研究问题还是要仔细深入一点的。当你对原理了解的有够透彻,开发起来也就得心应手了,很多开发中的问题和疑惑也就迎刃而解了,而且在面对其他问题的时候也可做到触类旁通。当然在开发中没有太多的时间让你去研究原理,开发中要以实现功能为前提,可等项目上线的后,你有大把的时间或者空余的时间,你大可去刨根问底,深入的去研究一项技术,为觉得这对一名程序员的成长是很重要的事情。
详解Ajax请求(三)——jQuery对Ajax的实现及serialize()函数对于表单域控件参数提交的使用技巧的更多相关文章
- Js表单验证控件-02 Ajax验证
在<Js表单验证控件(使用方便,无需编码)-01使用说明>中,写了Verify.js验证控件的基本用法,基本可以满足大多数验证需求,如果涉及服务端的验证,则可以通过Ajax. Ajax验证 ...
- 使用jquery.validate.js插件进行表单里控件的验证
jsp中具体实现的代码: <%@ page language="java" contentType="text/html; charset=UTF-8" ...
- Django(十二)视图--利用jquery从后台发送ajax请求并处理、ajax登录案例
一.Ajax基本概念 [参考]:https://www.runoob.com/jquery/jquery-ajax-intro.html 异步的javascript.在不全部加载某一个页面部的情况下, ...
- 采用指数退避算法实现ajax请求的重发,全部完成时触发回调函数
目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...
- Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求
Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求 >>>>>>>>>>>>>>&g ...
- 单选框radio改变事件详解(用的jquery的radio的change事件)
单选框radio改变事件详解(用的jquery的radio的change事件) 一.总结 1.用的jquery的radio的change事件:当元素的值发生改变时,会发生 change 事件,radi ...
- 详解SpringMVC请求的时候是如何找到正确的Controller
详解SpringMVC请求的时候是如何找到正确的Controller[附带源码分析] 目录 前言 源码分析 重要接口介绍 SpringMVC初始化的时候做了什么 HandlerExecutionCha ...
- TOMCAT原理详解及请求过程(转载)
转自https://www.cnblogs.com/hggen/p/6264475.html TOMCAT原理详解及请求过程 Tomcat: Tomcat是一个JSP/Servlet容器.其作为Ser ...
- 第一百八十六节,jQuery,验证表单插件,Ajax 表单插件,验证和提交表单
jQuery,验证表单插件,Ajax 表单插件,验证和提交表单 HTML <form id="reg" method="post" action=&quo ...
随机推荐
- 【Unity与23种设计模式】责任链模式(Chain of Responsibility)
GoF中定义: "让一群对象都有机会来处理一项请求,以减少请求发送者与接收者之间的耦合度.将所有的接受对象串联起来,让请求沿着串接传递,直到有一个对象可以处理为止." 举个现实中的 ...
- python解决图的最短路径问题
在hihoCoder上遇到一个算法题目,描述如下: 对图结构有了解的不难发现,这是经典的求图的最短路径问题.以下是python代码: def findMin(row): minL = max(row) ...
- 生成式模型之 GAN
生成对抗网络(Generative Adversarial Networks,GANs),由2014年还在蒙特利尔读博士的Ian Goodfellow引入深度学习领域.2016年,GANs热潮席卷AI ...
- angularjs上传图片和文件
很简单: $scope.upload = function() { var f = $scope.myFile; var fd = new FormData(); var img = document ...
- 浅谈TCP三次握手和四次挥手
学习三次握手和四次挥手前,先了解下几个基础的概念. Seq:数据段序号,我们都知道TCP是提供有序传输的,有序传输的基础就是数据段序号,接收方在收到发送方乱序包的情况下可以根据Seq进行重新排序,确保 ...
- 读headFirst设计模式 - 工厂模式
每次写博客都不知道要怎么引入要写的主题,挺头疼的一件事.今天就直接开门见山,今天要学的就是工厂模式,工厂就是批量生产制造东西的地方.在这里,工厂就是批量生产对象的地方. 学习书上的例子 假如你现在有一 ...
- RACSignal的一些常用用法
NSData + RACSupport.h @interface NSData (RACSupport) // Read the data at the URL using -[NSData init ...
- 【Python】 魔法方法
魔法方法 这个名字真的很中二有没有 = =(或者说翻译气息太浓了,作为一个学外语的看到这种真是想吐槽的不行..) 从形式上来说,在方法的名字前后个加上两条下划线的就是魔法方法了 .从功能上说,所有魔法 ...
- CSS奇思妙想图形(心形、气泡三角形、切角、梯形、饼图等)
今天看到一篇不错文章,在原来CSS3图形创建基础上扩展了很多. 这里记录总结下 心形 原理:利用 圆形 和 正方形实现 HTML: <div class="heartShaped&qu ...
- JavaScript(第二十八天)【Cookie与存储】
随着Web越来越复杂,开发者急切的需要能够本地化存储的脚本功能.这个时候,第一个出现的方案:cookie诞生了.cookie的意图是:在本地的客户端的磁盘上以很小的文件形式保存数据. 一.Cook ...