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字符串的转换框架工具JacksonJackson可以轻松的将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 基础运用的更多相关文章

  1. jQuery和AJAX基础

    jQuery和AJAX基础 jQuery 基础: 1.jQuery 选择器: 元素选择器:$("p"): #id 选择器:$("#test"): .class ...

  2. HTML5,jQuery,ajax基础面试

    简要描述HTML5中的本地存储 答案: 很多时候我们会存储用户本地信息到电脑上,例如:比方说用户有一个填充了一半的长表格,然后突然网络连接断开了,这样用户希望你能存储这些信息到本地,当网络回复的时候, ...

  3. JQuery之Ajax基础

    众所周知JQuery中的Ajax主要用于数据传输,其数据传输格式为JSON格式数据,比XML格式数据传输更快. ajax 是 Asynchronous JavaScript and XML的简写,aj ...

  4. jQuery基础---Ajax基础教程(二)

    jQuery基础---Ajax进阶 内容提纲: 1.加载请求 2.错误处理 3.请求全局事件 4.JSON 和 JSONP 5.jqXHR 对象 发文不易,转载请注明出处! 在 Ajax 基础一篇中, ...

  5. jQuery基础---Ajax基础教程

    jQuery基础---Ajax基础 内容提纲: 1.Ajax 概述 2.load()方法 3.$.get()和$.post() 4.$.getScript()和$.getJSON() 5.$.ajax ...

  6. jQuery 选择器 (基础恶补之三)+Ajax

    jQuery load() 方法 jQuery load() 方法是简单但强大的 AJAX 方法. load() 方法从服务器加载数据,并把返回的数据放入被选元素中. 语法: $(selector). ...

  7. 第十六章:Python の Web开发基础(三) jQuery与Ajax

    本課主題 jQuery 介绍 Ajax 介绍 jQuery 介绍 选择器 jQuery 的选择器分不同的种类,主要目的是用来查找目标的 HTML 标签,方便对目标标签进行操作,比如找到 <li& ...

  8. jQuery基础---Ajax基础

    内容提纲: 1.Ajax 概述 2.load()方法 3.$.get()和$.post() 4.$.getScript()和$.getJSON() 5.$.ajax()方法 6.表单序列化 发文不易, ...

  9. JS原生ajax与Jquery插件ajax深入学习

    序言: 近来随着项目的上线实施,稍微有点空闲,闲暇之时偶然发现之前写的关于javascript原生xmlHttpRequest ajax方法以及后来jquery插件ajax方法,于是就行了一些总结,因 ...

随机推荐

  1. H3 BPM:为石化企业提供一个不一样的全停大修平台

    H3 BPM大型炼化企业装置全停检修管理平台(简称"全停大修")结合国际化的流程管理理念.成熟的系统技术架构.优秀的行业解决方案,为石油化工行业全停大修提供了卓越的信息化管理方案, ...

  2. ADFS3.0与SharePoint2013安装配置(原创)

    现在越来越多的企业使用ADFS作为单点登录,我希望今天的内容能帮助大家了解如何配置ADFS和SharePoint 2013.安装配置SharePoint2013这块就不做具体描述了,今天主要讲一下怎么 ...

  3. 在 Windows7 上按照 MySQL5.7

    在 Windows7 上按照 MySQL5.7 1.从官网下载最新版本的 MySQL,这里下载的是 mysql-5.7.17-win32: 2.将下载的 mysql-5.7.17-win32.zip ...

  4. SQL中字符串拼接

    1. 概述 在SQL语句中经常需要进行字符串拼接,以sqlserver,oracle,mysql三种数据库为例,因为这三种数据库具有代表性. sqlserver: select '123'+'456' ...

  5. 在VMware上安装CentOS -7

    1.下载好VMware 2.准备好CentOS的镜像文件 3.打开VMware创建新的虚拟机 选择自定义高级后按下一步 继续下一步 选择稍后安装操作系统 客户机操作系统选择Linux,版本选择Cent ...

  6. ASP.NET 5 Beta 8 发布

    ASP.NET 5 的路线图(详见 ASP.NET 5 Schedule and Roadmap : https://github.com/aspnet/home/wiki/roadmap ):Bet ...

  7. 【腾讯Bugly干货分享】H5 视频直播那些事

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57a42ee6503dfcb22007ede8 Dev Club 是一个交流移动 ...

  8. Unity AssetBundle爬坑手记

    这篇文章从AssetBundle的打包,使用,管理以及内存占用各个方面进行了比较全面的分析,对AssetBundle使用过程中的一些坑进行填补指引以及喷!   AssetBundle是Unity推荐的 ...

  9. 用Go语言做产品半年的一些感觉

    用Go语言做产品刚好半年,有一些感觉跟大家说道说道. 在使用Go之前,我常常想象,无法使用先进的Debug工具会对工作进度造成多么巨大的影响.甚至在Visual Studio的娇惯下认为,不能调试基本 ...

  10. spring各jar包作用(转载)

     除了spring.jar文件,Spring还包括有其它13个独立的jar包,各自包含着对应的Spring组件,用户可以根据自己的需要来选择组合自己的jar包,而不必引入整个spring.jar的所有 ...