【jQuery中的Ajax】
首先说说Ajax的优势:
不需要插件支持;
优秀的客户体验;
提高web程序的性能:在于传输数据的方式,它是通过XMLHttpRequest对象向服务器提交希望提交的数据,即按需发送;
减少服务器和带宽的负担。
Ajax的不足
浏览器对XMLHttpRequest对象的支持度不足;
破坏了浏览器前进、“后退”按钮的正常功能;
对搜索引擎支持不足:通常搜索引擎都是通过爬虫程序来对互联网上的数据进行搜索整理的,但是爬虫程序不能理解那些奇怪的javascript代码和因此引起的页面变化。
开发和调试工具的缺乏。
编写第一个Ajax小例子:
这是一个传统的javascript的例子,例子描述了,单击一个按钮,然后通过传统的javascript的Ajax的方式从服务器端取回一个“Hello Ajax”的字符串显示在页面上。
<script type="text/javascript"> function Ajax(){ var xmlhttpreq=null; if(window.AtiveXObject){ xmlhttpreq= new Active XObject("Microsoft.XMLHTTP"); }else if{ xmlhttpreq = new XMLHttpRequest(); xmlhttpreq.open("GET","test.php",true); xmlhttpreq.onreadystatechange = RequestCallback; xmlhttpreq.send(null); } } function RequestCallback(){ if(xmlhttpreq.readystate==4){ if(xmlhttpreq.status==200){ document.getElementById("resText").innerHTML = xmlHTTPReq.responseText; } } } </script> </head> <body> <input type="button" value="Ajax提交" onclick="Ajax();"> <div id="resText"></div> </body>//部分代码省略
进入正题:jQuery中的Ajax
jquery对ajax操作进行了封装,在jquery中$.ajax()方法属于最底层的方法,第二层是load()、$.get()$.post()方法,第三层是$.getScript()和$getJSON()方法。
先来讲讲第2层的方法
【load()方法】
1、载入html文档
load()方法是jQuery中最简单和最常用的Ajax方法,能载入远程的html代码并插入到DOM中,结构为:load(url,data,callback);
参数说明:
url:String类型,表示请求html页面的统一资源定位器地址;
data:Object类型,发送至服务器的key/value数据;
callback:Function类型,请求完成后的回调函数,无论请求成功或失败。
例如加载一个test.html内容
$(function(){
$("#send").click(function(){
$("#restext").load("test.html");
});
})
2、筛选载入html文档:结构:$("#restext").load("test.html .para");(url与选择器之间有一个空格)
3、传递方式:load方法的传递方式是根据参数data来自动指定,如果没有参数采用GET方式传递。
4、回调参数:对于必须在加载完成后才能继续的操作。load()方法提供了回调函数(callback),该函数有三个参数,代表:请求返回的内容、请求状态和XMLHttpRequest对象。
$("#restext").load("test.html", function(responseText,textStatic, XMLHttpRequest){
//responseText:请求返回的内容
//textStatic:请求状态:success,error,notmodified,timeout4种
//XMLHttpRequest:XMLHttpRequest对象
});
【$.get()和$.post()方法】
load()方法常用来从web服务器上获取静态的数据文件。在项目中,如果需要传递一些参数给服务器中的页面,就可以使用$get()和$post()方法。这两个方法都是jquery中的全局函数。
$.get()方法
结构为:$.get()(url,data,callback,type);
参数说明:其他如上,type表示服务器端返回内容的格式,包括xml,html,json,等
下面是一个例子片段:
$("#send").click(function(){
$.get("get1.php",{/一个json片段},回调函数);
});
服务器返回的数据格式有多种:html片段、xml文档、json文件。
通过这三种数据格式的优缺点分析:
可以得知不需要与其他应用程序共享数据时,使用html来提供返回数据一般是最简单的;如果数据需要重用,json是不错的选择,他在性能和 文件大小方面具有优势;的那个远程应用程序未知时,XML是明知的选择,他也是web服务界的“世界语”。
$.post()方法
结构和$.get()方法相同,不过也有区别,就是一些传递数据的规则不同。
以上方法完成了一些常规的Ajax程序,如果需要编写一些复杂的程序就需要用到jquery中$.ajax()方法。
下面讲第三层方法:
$.getScript()方法和$.getJson()方法
$.getScript()方法:有时候页面初次加载时就取得全部的javascript文件是没有必要的,虽然也有一些解决方法,但是都不理想,为此,jquery提供了$.getScript()方法来直接加载.js文件。
$("#send").click(function(){
$.getScript("test.js");
});
$.getJson()方法:加载JSON文件,和$.getScript()方法的用法相同。
另外jQuery还提供了一个通用的遍历方法$.each();用于遍历对象和数组,他不同于jquery对象的each方法,他是一个全局函数,不操作对象,而是以一个数组或对象作为第一个参
数,以一个回调函数作为第二个参数,其中,回调函数具有两个参数,索引及对应变量或内容。
现在来讲$.ajax()方法
它是jQuery中的最底层的方法,该方法只有一个参数,但是这个对象里面包括了该方法所需要的请求设置以及回调函数等信息,参数以key/value的形式存在,所有参数都是可选,常用参数为:
url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址。
type: 要求为String类型的参数,请求方式(post或get)默认为get。注意其他http请求方法,例如put和delete也可以使用,但 仅部分浏览器支持。
timeout: 要求为Number类型的参数,设置请求超时时间(毫秒)。此设置将覆盖$.ajaxSetup()方法的全局设置。
data: 要求为Object或String类型的参数,发送到服务器的数据。如果已经不是字符串,将自动转换为字符串格式。get请求中将附加在url后。防止这种自动转换,可以查看processData选项。对象必须为key/value格式,例如{foo1:"bar1",foo2:"bar2"}转换为&foo1=bar1&foo2=bar2。如果是数组,JQuery将自动为不同值对应同一个名称。例如
{foo:["bar1","bar2"]}转换为&foo=bar1&foo=bar2。
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:返回纯文本字符串。
beforeSend:要求为Function类型的参数,发送请求前可以修改XMLHttpRequest对象的函数,例如添加自定义HTTP头。在beforeSend中如果返回false可以取消本次ajax请求。
XMLHttpRequest对象是惟一的参数。
function(XMLHttpRequest){
this; //调用本次ajax请求时传递的options参数
}
complete:要求为Function类型的参数,请求完成后调用的回调函数(请求成功或失败时均调用)。参数:XMLHttpRequest对象和一个描述成功请求类型的字符串。
function(XMLHttpRequest, textStatus){
this; //调用本次ajax请求时传递的options参数
}
success:要求为Function类型的参数,请求成功后调用的回调函数,有两个参数。
(1)由服务器返回,并根据dataType参数进行处理后的数据。
(2)描述状态的字符串。
function(data, textStatus){
//data可能是xmlDoc、jsonObj、html、text等等
this; //调用本次ajax请求时传递的options参数
};
error:要求为Function类型的参数,请求失败时被调用的函数。该函数有3个参数,即XMLHttpRequest对象、错误信息、捕获的错误对象(可选)。
ajax事件函数如下:
function(XMLHttpRequest, textStatus, errorThrown){
//通常情况下textStatus和errorThrown只有其中一个包含信息
this; //调用本次ajax请求时传递的options参数
}
global:要求为Boolean类型的参数,默认为true。表示是否触发全局ajax事件。设置为false将不会触发全局 ajax事件,ajaxStart或ajaxStop可用于控制各种ajax事件。
【序列化元素】
1、serialize()方法
它能将DOM元素内容序列化为字符串,用于Ajax的请求,解决了表单内容很复杂,再提交表单的时候就会等待整个页面刷新,使得表单缺乏弹性。
$("#send").click(function(){
$.get("get1.php",$("#form1").serialize() ,回调函数);
});
2、serializeArray()方法:该方法不是返回字符串,而是将DOM序列化后,返回JSON格式的数据。
3、$.param()方法
它是serialize()方法的核心,用来对一个数组或对象按照key/value进行序列化。例如:
var obj={a:1,b:2,c:3}; var k = $.param(obj); alert(k);//a=1&b=2&c=3
【jQuery中的Ajax全局事件】
jquery简化ajax操作不仅体现在调用ajax方法和处理响应方面,而且还体现在对ajax请求中http的控制,jquery通过自定义一些全局函数,能够为各种与ajax相关的事件注册回调
函数。
【基于jquery的ajax聊天室程序】
当作自行练习,可查阅相关资料。