jQuery与ajax 基础运用
jQuery是一个轻量级js框架,使用方便快捷,更是封装ajax处理方法,如$.load() $.get() $.post() 等
但最常用的方法还是$.ajax()
一、一般的格式为
$.ajax({
type: 'POST',
async: false, //注意这里要求为Boolean类型的参数,false不能写成'false'不然会被解析成true
url: url ,
data: data ,
dataType:'json',
cache:false, //同理
success: success ,
error:error,
dataType: dataType
});
1、type(发送方式 post与get的区别 )
不同点一:get提交方式会把请求参数以key,value的方式拼接到url中,以至于对提交数据大小有所限制,最长2048个字符;post提交方式是通过HTT请求附件进行,可以实现大量数据传送,在url上不会显示数据,而是保存在web服务器日志中。所以相对而言post提交方式对数据的安全性得到支持。
不同点二:get提交方式会将数据缓存,而post不会。
不同点三:编码方式不同,具体参照链接,详细讲解了get和post方法处理乱码问题。 http://www.cnblogs.com/dyllove98/archive/2013/07/31/3228485.html
如果使用get方法提交,在后台获取值的时候必须使用new String(className.getBytes("ISO8859-1"),"UTF-8")来进行转码才可以不乱码
如果使用post方式提交,在后台不乱码,前提是在web.xml已经配置了编码过滤器,并且在页面中也配置了相应的编码格式
2、async (同步方式 true和false的区别)
async默认的设置值为true,这种情况为异步方式,就是说当ajax发送请求后,在等待server端返回的这个过程中,前台会继续 执行ajax块后面的脚本,直到server端返回正确的结果才会去执行success,也就是说这时候执行的是两个线程,ajax块发出请求后一个线程 和ajax块后面的脚本(另一个线程),设置async值为false时候,页面进入阻塞模式并出现假死状态,直到这个AJAX执行完毕后才会继续运行其他代码页面假死状态解除。
同步例子如:在一个Bootstrap的popover()运用中动态加载用户消息时details_in_popup()函数返回参数显示在pop框中,若不设置async为同步最终取不到客户端返回的count值时就返回content值
<script type="text/javascript">
$('.top-menu #messages').popover({
html:true,
placement: 'bottom',
content: function(){
var div_id = "tmp-id-" + $.now();
return details_in_popup(div_id);
}
});
function details_in_popup(div_id){
var uid = $("#uid").text();
var urls = "ajaxMessageCounts.action?identify=1&id=" + uid;
var contents = function load_val2(){
var result='';
$.ajax({
dataType:'json',
url : urls,
async:false,//这里选择异步为false,直到这个AJAX执行完毕后才会继续运行其他代码
success : function(data){
var count=data.counts;
$("#messages").attr('data-notification', count); if(count == '0'){
result = '<ul><li><br></br><center>暂时没有新消息</center><br></br></li></ul><div class="popover_footer"><a href="searchMessage.action?identify=1&&id='+uid+'&&point=1" target="content">查看全部消息</a></div>';
}else{
var head1=data.head1; var poTime1=data.poTime1;
var mid1 = data.mid1;
var poName1=data.poName1;
var content1=data.content1;
if(count == '1'){
result = '<ul><li><a href="showDetail.action?id='+mid1+'&&identify=1&&uid='+uid+'&&point=1" target="content"><img src="backstage/assets/img/gallery/'+head1+'.jpg"><span>'+poTime1+'</span><h4>'+poName1+'</h4>'+content1+'</a></li><ul><div class="popover_footer"><a href="searchMessage.action?identify=1&&id='+uid+'&&point=1" target="content">查看全部消息</a></div>';
}
if(count == '2'){
var head2=data.head2;
var poTime2=data.poTime2;
var mid2 = data.mid2;
var poName2=data.poName2;
var content2=data.content2;
result = '<ul><li><a href="showDetail.action?id='+mid2+'&&identify=1&&uid='+uid+'&&point=1" target="content"><img src="backstage/assets/img/gallery/'+head1+'.jpg"><span>'+poTime1+'</span><h4>'+poName1+'</h4>'+content1+'</a></li><li><a href="#"><img src="backstage/assets/img/gallery/'+head2+'.jpg"><span>'+poTime2+'</span><h4>'+poName2+'</h4>'+content2+'</a></li></ul><div class="popover_footer"><a href="searchMessage.action?identify=1&&id='+uid+'&&point=1" target="content">查看全部消息</a></div>';
}
}
}
});
return result;
};
// alert(contents);
return contents;
}
</script>
异步例子如:从用户体验度来思考,加载数据时候提示“loading、、、”
$.ajax(function(){
//省略了一些参数,这里只给出async 和 beforeSend
async: true, //同步请求,默认情况下是异步(true),若写false将看不到提示内容
beforeSend: function(){
$('#warning').text('loading。。。');
}
});
3、url
url是发送请求的链接地址,可以在URL上拼接请求参数,则提交方式为get如:
var urls = "ajaxMessageCounts.action?identify=1&id=" + uid;
4、data
data可以有几种方式向服务器端发送请求参数:
function details_in_popup(){
$.ajax({
type:'post',
url:'ajaxMessageCounts.action',
data:'identity='+identity + 'flag='+flag, //文本方式
cache:false,
dataType:'json',
success:function(data){
}
});
}
function details_in_popup(){
$.ajax({
type:'post',
url:'ajaxMessageCounts.action',
data:{ identity:'123', flag:'true' }, //json对象
cache:false,
dataType:'json',
success:function(data){
}
});
}
function details_in_popup(){
var formParam = $("#form1").serialize();//序列化表单内容为字符串
$.ajax({
type:'post',
url:'ajaxMessageCounts.action',
data:formParam,
cache:false,
dataType:'json',
success:function(data){
}
});
}
5、dataType
要求为String类型的参数,预期服务器返回的数据类型。如果不指定,JQuery将自动根据http包mime信息返回responseXML或responseText,并作为回调函数参数传递。可用的类型如下:
xml:返回XML文档,可用JQuery处理。
html:返回纯文本HTML信息;包含的script标签会在插入DOM时执行。
script:返回纯文本JavaScript代码。不会自动缓存结果。除非设置了cache参数。注意在远程请求时(不在同一个域下),所有post请求都将转为get请求。
json:返回JSON数据。
jsonp:JSONP格式。使用SONP形式调用函数时,例如myurl?callback=?,JQuery将自动替换后一个“?”为正确的函数名,以执行回调函数。
text:返回纯文本字符串。
6、cache
要求为Boolean类型的参数,默认为true(当dataType为script时,默认为false),设置为false将不会从浏览器缓存中加载请求信息。
这里介绍几种防止缓存的方法:
1)在客户端请求链接上添加随机参数:
var url1 = "ajaxMessageCounts.action?date=" + new Date().getTime();
var url2 = "ajaxMessageCounts.action?random=" + Math.random();
2)在HTTP headers禁止缓存:
<!--HTTP-->
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="Cache-Control" content="no-cache, must-revalidate" />
<meta http-equiv="expires" content="Thu, 01 Jan 1970 00:00:01 GMT" />
<meta http-equiv="expires" content="0" />
<!--JSP-->
response.addHeader("Cache-Control", "no-cache");
response.addHeader("Expires", "Thu, 01 Jan 1970 00:00:01 GMT");
3)在XMLHttpRequest发送请求之前加上:
XMLHttpRequest.setRequestHeader("If-Modified-Since","0");
XMLHttpRequest.send(null);
7、success
要求为Function类型的参数,请求成功后调用的回调函数,有两个参数。
(1)由服务器返回,并根据dataType参数进行处理后的数据。
(2)描述状态的字符串。
function(data, textStatus){
//data可能是xmlDoc、jsonObj、html、text等等
this; //调用本次ajax请求时传递的options参数
}
8、error
要求为Function类型的参数,请求失败时被调用的函数。该函数有3个参数,即XMLHttpRequest对象、错误信息、捕获的错误对象(可选)。ajax事件函数如下:
function(XMLHttpRequest, textStatus, errorThrown){
//通常情况下textStatus和errorThrown只有其中一个包含信息
this; //调用本次ajax请求时传递的options参数
}
当然$.ajax()方法参数不止这些,更多参数详情参考http://www.cnblogs.com/tylerdonet/p/3520862.html。
给个异步加载下拉列表的例子:
<script type="text/javascript">
setJsonSelectValue("problemType","ajaxMessageCounts.action","",{"identify":1});
//selectId:select选择框ID URL:请求Action value:设置select的selected属性 param:请求参数,这里为json串
function setJsonSelectValue(selectId,url,value,param){
$.ajax({
url: url,
cache:false,
data:param,
async:false,
dataType:"json",
success: function(data, textStatus, jqXHR){ var select = $("#" + selectId);
for(var i=0;i<data.length;i++){
select.options.add(new Option(data[i].name,data[i].value)); //添加option 后台返回data为List对象数组
}
//设置selected
if(value!=""){
var flag = false;
$("#"+selectId +" option").each(function() {
if (value == $(this).val()) {
flag = true;
}
});
if(flag){
select.value=value;
} else{
var first = $("#"+selectId+" option[index='0']").val();
$("#"+selectId).val(first);
}
}
},
error:function (data, textStatus, jqXHR){
alert(textStatus);
}
});
}
</script>
二、ajax与Struts的联合使用加载对象
1、给出一个后台封装json字符串的转换框架工具Jackson,Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。
2、官网下载Jackson工具包,下载地址;现给出总共的封装Jackson的jar包jackson-all-1.6.4.jar
3、Action代码:
public class IdentityMessage extends ActionSupport {
private int id;
private MessageService messagedao; //数据访问层的组件 public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
} public MessageService getMessagedao() {
return messagedao;
}
public void setMessagedao(MessageService messagedao) {
this.messagedao = messagedao;
} public String searchMessage() throws JsonGenerationException, JsonMappingException, IOException{ Message message = messagedao.searchMessage(id);
//前台主要取title和content属性
ObjectMapper mapper = new ObjectMapper();
String jsonstr = mapper.writeValueAsString(message); response.setContentType("text/javascript");
response.setCharacterEncoding("utf-8"); response.getWriter().print(jsonstr);
return null;
}
}
4、struts.xml文件配置:
<action name="searchMessage" class="identifyMessBean" method="searchMessage">
</action>
5、applicationContext-beans.xml文件配置:
<bean id="MessageDao" class="com.dao.MessageDao">
<property name="sessionFactory" ref="sessionFactory"/>
</bean> <bean id="MessageService" class="com.service.MessageService">
<property name="messagedao" ref="MessageDao"/>
</bean> <bean id="identifyMessBean" class="com.action.IdentityMessage">
<property name="messagedao" ref="MessageService"/>
</bean>
6、jQuery代码
<script type="text/javascript">
function saveUserMessage(id){
$.ajax({
dataType:'json',
url:'searchMessage.action',
data: {
id: id
},
type:'POST',
success:function(data){
if(title == ''){
$('#userClose'+id).empty().append("<h5>"+ data.title +"</h5>").append("<div id='contents"+id+"'>"+data.content+"</div>");
}else{
$('#userClose'+id+' h5').text(data.title);
$('#contents'+id).html(data.content);
}
//设置保存成功提示modal
$('#example_modaleditUser').modal('hide');
$("#example_modal3").css({position: "absolute", right: "600px", top: "20px",display:"block"}).width(170).height(20).show(3000);
$('#example_modal3').delay(1500).hide(0);
},
error:function(){
//设置保存失败提示modal
$('#example_modaleditUser').modal('hide');
$("#example_modal3").attr("class", "alert alert-error"); //设置新样式
$("#example_modal3 img").attr("src", "backstage/assets/img/error.png");
$("#message").text('修改失败,请稍候再试!');
$("#example_modal3").css({position: "absolute", right: "600px", top: "20px",display:"block"}).width(300).height(20).show(5000);
$('#example_modal3').delay(1500).hide(0);
}
},500);
}
</script>
7、HTML代码
<!-- 消息提醒 -->
<div class="alert alert-success" id="example_modal3" style="display: none ;width:300px;">
<button class="close" data-dismiss="alert" type="button">×</button>
<img src="backstage/assets/img/success.png" width="30px;" height="30px;"/> <strong id="message">操作成功!</strong>
</div>
三、blockUI配合ajax提高用户体验度
BlockUI 插件是用于进行AJAX操作时模拟同步传输时锁定浏览器操作。当它被激活时,它会阻止使用者与页面(或页面的一部分)进行交互,直至它被取消。 BlockUI以在DOM中添加元素的方法来实现阻止用户与浏览器交互的外观和行为。我们可以根据需求来设置遮罩样式。更多demo可以参考http://www.malsup.com/jquery/block/ 或者 http://www.fengfly.com/plus/view-213992-1.html
先给出一个ajax请求时锁定页面并加载gif动图的例子:
1、页面上导入blockUI插件js文件 当然必不可少的jQuery文件: (下载地址)
<script type="text/javascript" src="js/jquery.validate-1.13.1.js"></script>
<script type="text/javascript" src="backstage/assets/js/jquery.blockUI.js"></script>
2、在需要动图显示的地方添加代码:
<img id= "loading" src="data:images/loader4.gif" style="display:none;width:40px;height:40px;"/>
3、js内容
<script type="text/javascript">
function openAndClos(id){
$(document).ajaxStart(function(){
$.blockUI({
message: $('#loading'),
css: {
top: ($(window).height() - 400) /2 + 'px',
left:($(window).width() - 200) /2 + 'px',
width: '400px',
border: 'none'
},
overlayCSS:{backgroundColor: '#fff'}
});
}).ajaxStop($.unblockUI);
var args={"time":new Date()};
$.getJSON("searchMessage.action",args,function(data){
var count=data.counts;
//....do something
});
}
</script>
四、ajax在jQuery validate中的运用
jquery.validate插件为表单提供了强大的验证功能,让客户端表单验证变得更简单,同时提供了大量的定制选项,满足应用程序各种需求。该插件捆绑了一套有用的验证方法,包括 URL 和电子邮件验证,同时提供了一个用来编写用户自定义方法的 API。具体使用讲解请参考:http://www.runoob.com/jquery/jquery-plugin-validate.html
同样的,给出一个异步校验用户注册手机号重复的例子:
1)导入jquery.validate插件js文件 (下载地址)
<script type="text/javascript" src="js/jquery.validate-1.13.1.js"></script>
2)HTML代码
<form action = "turnToregisterNext.action" method="post" class="register" id="regForm" autocomplete="off" >
<label style="float:left;">注册手机号</label>
<input type="text" class="c_code_msg" style="margin-right: 10px;" name="phone" id="phone"/>
<input type="submit" id="c_code_button" class="c_code_button" style="margin-right: 10px;" value="下一步"/>
</form>
3)js代码
<script type="text/javascript">
$("#regForm").validate({
// 添加验证规则
rules: {
phone:{
required: true,
digits:true,
rangelength:[11,11],
remote: {
url: "checkPhone.action", //后台处理程序
type: "post", //数据发送方式
data: { //要传递的数据
phone: function() {
return $("#phone").val();
}
}
}
}
}, //重设提示信息
messages:{
phone: {
required: "请填写手机号码",
digits:"请正确填写手机号码",
rangelength: "手机号码为11位" ,
remote:"此手机已经注册过"
}
}
});
</script>
4)后台处理程序
Struts配置:
<action name="checkPhone" class="UserBean" method="checkPhone"></action>
Action类:
public String checkPhone() throws IOException{
//0.手机号重复 1.不重复
int flag = 0;
flag = ius.phoneHasReg(phone); //数据库查询返回值
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/xml");
response.setHeader("Cache-Control", "no-cache");
PrintWriter out = response.getWriter();
if(flag == 0)
out.print(false);
else
out.print(true);
return null;
}
jQuery与ajax 基础运用的更多相关文章
- jQuery和AJAX基础
jQuery和AJAX基础 jQuery 基础: 1.jQuery 选择器: 元素选择器:$("p"): #id 选择器:$("#test"): .class ...
- HTML5,jQuery,ajax基础面试
简要描述HTML5中的本地存储 答案: 很多时候我们会存储用户本地信息到电脑上,例如:比方说用户有一个填充了一半的长表格,然后突然网络连接断开了,这样用户希望你能存储这些信息到本地,当网络回复的时候, ...
- JQuery之Ajax基础
众所周知JQuery中的Ajax主要用于数据传输,其数据传输格式为JSON格式数据,比XML格式数据传输更快. ajax 是 Asynchronous JavaScript and XML的简写,aj ...
- jQuery基础---Ajax基础教程(二)
jQuery基础---Ajax进阶 内容提纲: 1.加载请求 2.错误处理 3.请求全局事件 4.JSON 和 JSONP 5.jqXHR 对象 发文不易,转载请注明出处! 在 Ajax 基础一篇中, ...
- jQuery基础---Ajax基础教程
jQuery基础---Ajax基础 内容提纲: 1.Ajax 概述 2.load()方法 3.$.get()和$.post() 4.$.getScript()和$.getJSON() 5.$.ajax ...
- jQuery 选择器 (基础恶补之三)+Ajax
jQuery load() 方法 jQuery load() 方法是简单但强大的 AJAX 方法. load() 方法从服务器加载数据,并把返回的数据放入被选元素中. 语法: $(selector). ...
- 第十六章:Python の Web开发基础(三) jQuery与Ajax
本課主題 jQuery 介绍 Ajax 介绍 jQuery 介绍 选择器 jQuery 的选择器分不同的种类,主要目的是用来查找目标的 HTML 标签,方便对目标标签进行操作,比如找到 <li& ...
- jQuery基础---Ajax基础
内容提纲: 1.Ajax 概述 2.load()方法 3.$.get()和$.post() 4.$.getScript()和$.getJSON() 5.$.ajax()方法 6.表单序列化 发文不易, ...
- JS原生ajax与Jquery插件ajax深入学习
序言: 近来随着项目的上线实施,稍微有点空闲,闲暇之时偶然发现之前写的关于javascript原生xmlHttpRequest ajax方法以及后来jquery插件ajax方法,于是就行了一些总结,因 ...
随机推荐
- H3 BPM:为石化企业提供一个不一样的全停大修平台
H3 BPM大型炼化企业装置全停检修管理平台(简称"全停大修")结合国际化的流程管理理念.成熟的系统技术架构.优秀的行业解决方案,为石油化工行业全停大修提供了卓越的信息化管理方案, ...
- ADFS3.0与SharePoint2013安装配置(原创)
现在越来越多的企业使用ADFS作为单点登录,我希望今天的内容能帮助大家了解如何配置ADFS和SharePoint 2013.安装配置SharePoint2013这块就不做具体描述了,今天主要讲一下怎么 ...
- 在 Windows7 上按照 MySQL5.7
在 Windows7 上按照 MySQL5.7 1.从官网下载最新版本的 MySQL,这里下载的是 mysql-5.7.17-win32: 2.将下载的 mysql-5.7.17-win32.zip ...
- SQL中字符串拼接
1. 概述 在SQL语句中经常需要进行字符串拼接,以sqlserver,oracle,mysql三种数据库为例,因为这三种数据库具有代表性. sqlserver: select '123'+'456' ...
- 在VMware上安装CentOS -7
1.下载好VMware 2.准备好CentOS的镜像文件 3.打开VMware创建新的虚拟机 选择自定义高级后按下一步 继续下一步 选择稍后安装操作系统 客户机操作系统选择Linux,版本选择Cent ...
- ASP.NET 5 Beta 8 发布
ASP.NET 5 的路线图(详见 ASP.NET 5 Schedule and Roadmap : https://github.com/aspnet/home/wiki/roadmap ):Bet ...
- 【腾讯Bugly干货分享】H5 视频直播那些事
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57a42ee6503dfcb22007ede8 Dev Club 是一个交流移动 ...
- Unity AssetBundle爬坑手记
这篇文章从AssetBundle的打包,使用,管理以及内存占用各个方面进行了比较全面的分析,对AssetBundle使用过程中的一些坑进行填补指引以及喷! AssetBundle是Unity推荐的 ...
- 用Go语言做产品半年的一些感觉
用Go语言做产品刚好半年,有一些感觉跟大家说道说道. 在使用Go之前,我常常想象,无法使用先进的Debug工具会对工作进度造成多么巨大的影响.甚至在Visual Studio的娇惯下认为,不能调试基本 ...
- spring各jar包作用(转载)
除了spring.jar文件,Spring还包括有其它13个独立的jar包,各自包含着对应的Spring组件,用户可以根据自己的需要来选择组合自己的jar包,而不必引入整个spring.jar的所有 ...