- 浏览: 29399 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
1025250620:
挺好的文章~~~thanks~
面向方面编程 -
mark35:
jquery.load 只支持异步。要同步的话得自己扩展。
jQuery与Ajax的应用 -
对酒当歌,人生几何:
不错,本来用load就可以了,但是不想异步执行,只能用$.aj ...
jQuery与Ajax的应用 -
avanry:
没看懂什么意思
水煮《saas架构》第三章 -
绝对任逍遥:
拜读之,我对于saas不甚了解,还停留在概念阶段,楼主讲的挺深 ...
对saas的解析
6.1 Ajax发展历史
AJAX全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。
该技术在1998年前后得到了应用。允许客户端脚本发送HTTP请求(XMLHTTP)的第 一个组件由Outlook Web Access小组写成。该组件原属于微软Exchange Server,并且迅速地成为了Internet Explorer 4.0的一部分。部分观察家认为,Outlook Web Access是第一个应用了Ajax技术的成功的商业应用程序,并成为包括Odd post的网络邮件产品在内的许多产品的领头羊。但是,2005年初,许多事件使得Ajax被大众所接受。Google在它著名的交互应用程序中使用了异 步通讯,如Google讨论组、Google地图、Google搜索建议、Gmail等。Ajax这个词由《Ajax: A New Approach to Web Applications》一文所创,该文的迅速流传提高了人们使用该项技术的意识。另外,对Mozilla/Gecko的支持使得该技术走向成熟,变得 更为易用。
使用Ajax的最大优点,就是能在不更新整个页面的前提下维护数据。这使得Web应用程序更 为迅捷地回应用户动作,并避免了在网络上发送那些没有改变过的信息,减少网络阻塞。随着web2.0的兴起,RIA(rich interface application )概念的推出,Ajax的作用越来重要,甚至还没有找到一个更好的替代品。虽然Adobe公司的as3.0也推出,但是flash庞大的躯体,在目前拥挤 的网络上还有点力不从心。(http://www.adobe.com/cn/)
6.2 Ajax的基础应用
首先,我们需要用JavaScript来创建XMLHttpRequest 对象向服务器发送一个HTTP请求, XMLHttpRequest 类首先由Internet Explorer以ActiveX对象引入,被称为XMLHTTP。 后来Mozilla﹑Netscape﹑Safari 和其他浏览器也提供了XMLHttpRequest类,不过它们创建XMLHttpRequest类的方法不同。
对于Internet Explorer浏览器,创建XMLHttpRequest 方法如下:
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP.3.0"); //3.0或4.0, 5.0
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
对于Mozilla﹑Netscape﹑Safari等浏览器,创建XMLHttpRequest 方法如下(IE7和Firefox3是一样的了):xmlHttp = new XMLHttpRequest();
在实际应用中,为了兼容多种不同版本的浏览器,一般将创建XMLHttpRequest类的方法写成如下形式:
var xmlHttp = false;//开始初始化XMLHttpRequest对象
if(window.XMLHttpRequest){ //Mozilla (IE7)浏览器
xmlHttp = new XMLHttpRequest();
if(xmlHttp.overrideMimeType) {//设置MiME类别
xmlHttp.overrideMimeType('text/xml');
}
}
else if (window.ActiveXObject) { // IE(7以下版本)浏览器
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
xmlHttp=false;
}
}
}
在定义对象后,就要发送请求了。可以调用HTTP请求类的open()和send()方法,如下所示:
xmlHttp.open('GET', URL, true);
xmlHttp.send(null);
open()的第一个参数是HTTP请求方式—GET,POST或任何服务器所支持的您想调用的方式。 按照HTTP规范,该参数要大写;否则,某些浏览器(如Firefox)可能无法处理请求。
第二个参数是请求页面的URL。
第三个参数设置请求是否为异步模式。如果是TRUE,JavaScript函数将继续执行,而不等待服务器响应。这就是"AJAX"中的"A"。
用JavaScript来创建XMLHttpRequest 类向服务器发送一个HTTP请求后,接下来要决定当收到服务器的响应后,需要做什么。这需要告诉HTTP请求对象用哪一个JavaScript函数处理这 个响应。可以将对象的onreadystatechange属性设置为要使用的JavaScript的函数名,如下所示:
xmlHttp.onreadystatechange = function(){
// JavaScript代码段
if(xmlHttp.readyState == 4) {
if(xmlHttp.status == 200) {
if(xmlHttp.responseText){
//操作服务器返回的数据
process(xmlHttp.responseText);
}
}
}
else{
//show loading
}
};
首先要检查请求的状态。只有当一个完整的服务器响应已经收到了,函数才可以处理该响应。XMLHttpRequest 提供了readyState属性来对服务器响应进行判断。
readyState的取值如下:
0 (未初始化)、1 (正在装载)、2 (装载完毕)、3 (交互中)、4 (完成)
当readyState=4时,一个完整的服务器响应已经收到了,接着,函数会检查HTTP服务器响应的状态值。完整的状态取值可参见W3C文档。当HTTP服务器响应的值为200时,表示状态正常。
Ajax一次操作就算是完成了,是不是很简单?实际上Ajax的基础操作也就是这样简单,只是在不同的应用上对返回特殊处理就显得很复杂,我们透过现象看本质也就这样几行,详细的Ajax基础教程可以参考各个浏览器的官方说明。
6.3 jQuery中Ajax
在第一章提到Javascript框架或者是工具中都包含了封装上述功能的Ajax工具,就不一一介绍,下边主要讲讲JQuery中的Ajax工具包。
使用 jQuery 将使 Ajax 变得及其简单。jQuery 提供有一些函数,这些函数是根据我们日常开发的需要而封装的一些快捷操作,比如:load、ajax、get、post等等。可以使简单的工作变得更加简单,复杂的工作变得不再复杂。
jQuery的ajax工具包封装有三个层次,目的有两,第一为了符合命名规范,见明思义;第二就是为区分跨域操作,因为第三层的两个函数可以跨域操作。这样写有点牵强,先这里理解,后边讲了JSON和JSONP就明白了。
最底层就是Ajax,封装了基础Ajax一些操作;
第二层就是load、get、post,封装了jQuery的Ajax;
第三层就是getScript、getJSON,封装了get。
下边我们就一一的介绍这些函数(方法)的用法。
6.3.1. jQuery.getScript( url, [callback] ) : 通过 GET 方式请求载入并执行一个 JavaScript 文件。这个函数就是一个get的简写,看看源代码:
return jQuery.get(url, null, callback, "script");
参数名称 |
类型 |
说明 |
url |
String |
请求的HTML页的URL地址 |
Callback(可选) |
Function |
载入成功时回调函数(只有当Response的返回状态是success才是调用该方法),不传递参数 |
jQuery 1.2 版本之前,getScript 只能调用同域 JS 文件。 1.2中,您可以跨域调用 JavaScript 文件。注意:Safari 2 或更早的版本不能在全局作用域中同步执行脚本。如果通过 getScript 加入脚本,请加入延时函数。
示例代码:
加载并执行 test.js。
$.getScript("test.js");
提示:本身xmlHttp 对象是不能进行异域操作的,但是浏览器head 中加载script 可以,这个函数就是在head 中创建一个script 元素,元素的src 属性是url ,应该真正不属于Ajax 范畴。
6.3.5. jQuery.getJSON( url, [callback] ) : 通过 GET 方式请求载入并执行一个 JavaScript 文件。这个函数就是一个get的简写,看看源代码:
return jQuery.get(url, null, callback, "json");
参数名称 |
类型 |
说明 |
url |
String |
请求的HTML页的URL地址 |
Callback(可选) |
Function |
载入成功时回调函数(只有当Response的返回状态是success才是调用该方法),自动将请求结果(执行后的JS对象)传递给该函数 |
这个函数的和上边的getScript的工作原理基本一样,我们看看上边的源代码就知道,支持跨域操作,本身也支持jsonp,什么是jsonp下边的章节我们再说。
示例代码:
$.getJSON("test.js",function(json){
$.each(json function(i,n){
alert(n);
alert(json.i);
})
});
6.3.2. load( url, [data], [callback] ) :载入远程 HTML 文件代码并插入至 DOM 中。
参数名称 |
类型 |
说明 |
url |
String |
请求的HTML页的URL地址 |
Data(可选) |
Obj |
发送至服务器的 key/value 数据 |
Callback(可选) |
Function |
请求完成时(不需要是success的)的回调函数,自动会将请求的结果,状态,XMLHttp对象传递给该函数。 |
这个方法默认使用 GET 方式来传递的,如果[data]参数有传递数据进去,就会自动转换为POST方式的。jQuery 1.2 中,可以指定选择符,来筛选载入的 HTML 文档,DOM 中将仅插入筛选出的 HTML 代码(url和选择器之间用空格分开)。语法形如 "url #some > selector"。
这个方法可以很方便的动态加载一些HTML文件,例如表单。
示例代码:
$(".ajax.load").load("/index.html .p",function (responseText, textStatus, XMLHttpRequest){
this;//在这里this指向的是当前的DOM对象,即$(".ajax.load")[0]
//alert(responseText);//请求返回的内容
//alert(textStatus);//请求状态:success,error
//alert(XMLHttpRequest);//XMLHttpRequest对象
});
6.3.3. jQuery.get( url, [data], [callback] ):使用GET方式来进行异步请求
参数名称 |
类型 |
说明 |
url |
String |
请求的HTML页的URL地址 |
Data(可选) |
Obj |
发送至服务器的 key/value 数据会做为QueryString附加到请求URL中 |
Callback(可选) |
Function |
载入成功时回调函数(只有当Response的返回状态是success才是调用该方法),自动将请求结果和状态传递给该函数 |
这是一个简单的 GET 请求功能以取代复杂 $.ajax 。请求成功时可调用回调函数。如果需要在出错时执行函数,请使用 $.ajax。示例代码:
$.get("./index.html", {app:"test",action:"test"}, function (data, textStatus){
//返回的 data 可以是 xmlDoc, jsonObj, html, text, 等等.
this; // 在这里this指向的是Ajax请求的选项配置信息,请参考下图
alert(data);
//alert(textStatus);//请求状态:success,error等等。
//当然这里捕捉不到error,因为error的时候根本不会运行该回调函数
//alert(this);
});
6.3.4. jQuery.post( url, [data], [callback], [type] ) :使用POST方式来进行异步请求
参数名称 |
类型 |
说明 |
url |
String |
请求的HTML页的URL地址 |
Data(可选) |
Obj |
发送至服务器的 key/value 数据会做为QueryString附加到请求URL中 |
Callback(可选) |
Function |
载入成功时回调函数(只有当Response的返回状态是success才是调用该方法),自动将请求结果和状态传递给该函数 |
Type(可选) |
String |
客户端请求的类型(JSON,XML,等等) |
这是一个简单的 POST 请求功能以取代复杂 $.ajax 。请求成功时可调用回调函数。如果需要在出错时执行函数,请使用 $.ajax。示例代码:
Ajax.aspx:
Response.ContentType = "application/json";
Response.Write("{result: '" + Request["action "] + ",Hello World '}");
jQuery 代码:
$.post("Ajax.aspx", { app: "test", action: "test" },
function (data, textStatus){
// data 可以是 xmlDoc, jsonObj, html, text, 等等.
//this; // 这个Ajax请求的选项配置信息,请参考jQuery.get()说到的this
alert(data.result);
}, "json");
Ajax.php
if(isset($_SERVER["HTTP_ACCEPT"])){
$accept=strtolower($_SERVER["HTTP_ACCEPT"]);
$tmp_array=explode(',',$_SERVER["HTTP_ACCEPT"]);
if(in_array('application/json',$tmp_array)){
echo json_encode($_GET);
}
}
jQuery 代码:
$.post("Ajax.php", { app: "test", action: "test" },
function (data, textStatus){
// data 可以是 xmlDoc, jsonObj, html, text, 等等.
//this; // 这个Ajax请求的选项配置信息,请参考jQuery.get()说到的this
alert(data.result);
}, "json");
这里设置了请求的格式为"json",需要注意的是,如果是json类型,返回结果会自动执行eval函数,本身服务器返回只是一个字符串,但是传递进来的参数已经是eval之后的JSON对象。其他的类型,比如text、html则按照字符串的方式进行处理即可。
6.3.5 $.ajax(options)的用法
这个是jQuery 的底层 Ajax 实现。简单易用的高层实现见 $.get, $.post 等。 $.ajax() 返回其创建的 XMLHttpRequest 对象。大多数情况下你无需直接操作该对象,但特殊情况下可用于手动终止请求。
注意: 如果你指定了 dataType 选项,请确保服务器返回正确的 MIME 信息,(如 xml 返回 "text/xml")。错误的 MIME 类型可能导致不可预知的错误。见 Specifying the Data Type for AJAX Requests 。当设置 datatype 类型为 'script' 的时候,所有的远程(不在同一个域中)POST请求都回转换为GET方式。
$.ajax() 只有一个参数:参数 key/value 对象,包含各配置及回调函数信息。详细参数选项见下。 jQuery 1.2 中,您可以跨域加载 JSON 数据,使用时需将数据类型设置为 JSONP。使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。数据类型设置为 "jsonp" 时,jQuery 将自动调用回调函数。
参数名称 |
类型 |
说明 |
url |
String |
(默认: 当前页地址) 发送请求的地址 |
type |
String |
(默认: "GET") 请求方式 ("POST" 或 "GET"), 默认为 "GET"。注意:其它 HTTP 请求方法,如 PUT 和 DELETE 也可以使用,但仅部分浏览器支持。 |
timeout |
Number |
(默认:0)设置请求超时时间(毫秒)。此设置将覆盖全局设置 |
data |
Object |
发送到服务器的数据。将自动转换为请求字符串格式。GET 请求中将附加在 URL 后。查看 processData 选项说明以禁止此自动转换。必须为 Key/Value 格式。如果为数组,jQuery 将自动为不同值对应同一个名称。如 {foo:["bar1", "bar2"]} 转换为 '&foo=bar1&foo=bar2'。 |
contentType |
String |
(默认: "application/x-www-form-urlencoded") 发送信息至服务器时内容编码类型。默认值适合大多数应用场合 |
processData |
Boolean |
(默认: true) 默认情况下,发送的数据将被转换为对象(技术上讲并非字符串) 以配合默认内容类型 "application/x-www-form-urlencoded"。如果要发送 DOM 树信息或其它不希望转换的信息,请设置为 false。 |
username |
String |
如果服务器需要登录访问的时候的用户名,一般不需要 |
password |
String |
如果服务器需要登录访问的时候的密码,一般不需要 |
accepts |
Object |
{xml: "application/xml, text/xml", html: "text/html", script: "text/javascript, application/javascript", json: "application/json, text/javascript", text: "text/plain", _default: "*/*"}告诉服务器可接受的数据类型,和下边的dataType是对应的,不需要修改 |
dataType |
String |
预期服务器返回的数据类型。如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息返回 responseXML 或 responseText,并作为回调函数参数传递,可用值: "xml": 返回 XML 文档,可用 jQuery 处理。 "html": 返回纯文本 HTML 信息;包含 script 元素。 "script": 返回纯文本 JavaScript 代码。不会自动缓存结果。 "json": 返回 JSON 数据 。 "jsonp": JSONP 格式。使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。 |
beforeSend |
Function |
发送请求前可修改 XMLHttpRequest 对象的函数,如添加自定义 HTTP 头。XMLHttpRequest 对象是唯一的参数 |
error |
Function |
(默认: 自动判断 (xml 或 html)) 请求失败时将调用此方法。这个方法有三个参数:XMLHttpRequest 对象,错误信息,(可能)捕获的错误对象 |
complete |
Function |
请求完成后回调函数 (请求成功或失败时均调用)。参数: XMLHttpRequest 对象,成功信息字符串。 |
sucess |
Function |
请求成功后回调函数。这个方法有两个参数:服务器返回数据,返回状态
|
global |
Boolean |
(默认: true) 是否触发全局 AJAX 事件。设置为 false 将不会触发全局 AJAX 事件,如 ajaxStart 或 ajaxStop 。可用于控制不同的Ajax事件 |
ifModified |
Boolean |
(默认: false) 仅在服务器数据改变时获取新数据。使用 HTTP 包 Last-Modified 头信息判断 |
cache |
Boolean |
(默认: true) jQuery 1.2 新功能,设置为 false 将不会从浏览器缓存中加载请求信息 |
async |
Boolean |
(默认: true) 默认设置下,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为 false。注意,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行 |
示例代码:
$.ajax({
type: "get",
url: "http://www.xxx.com/test.html",
beforeSend: function(XMLHttpRequest){
//ShowLoading();
},
success: function(data, textStatus){
//do something
},
complete: function(XMLHttpRequest, textStatus){
//HideLoading();
},
error: function(){
//请求出错处理
}
});
6.4 jQuery中的ajax服务端返回方式
6.4.1 html方式
这种方式是最常见的方式(默认方式),如果是IE7下执行和FireFox的对象是一样 的,XMLHttpRequest,上边我们讲了有onreadystatechanage事件,readyState属性,当是html形式返回的时 候,用到了另外一个属性responseText,当readyState=4的时候,XMLHttpRequest对象自动将放回的值以字符串的形式赋 值给该属性(这个不是jQuery的功能,是XMLHttpRequest),jQuery返回该字符串(这里如果返回值中有JS代码,并不执行),执行 sucuess回调函数,比如html()、append()等等,这些函数讲html代码装载到当前页面的时候才执行其中包含的js代码,而且该代码只 执行一次并不缓存。详细的说明请看文件操作函数说明。
示例代码:
$.ajax({
type: "get",
url: "http://www.xxx.com/test.html",
dataType: "html",//(可以不写,默认)
beforeSend: function(XMLHttpRequest){
//ShowLoading();
},
success: function(data, textStatus){
alert(data);//data是一个字符串对象
},
complete: function(XMLHttpRequest, textStatus){
//HideLoading();
},
error: function(){
//请求出错处理
}
});
6.4.2 xml方式
xml方式和html方式的整个工作流程是一样,就是操作了不同的属性,返回不同的对 象,html方式操作的responseText属性,而xml方式操作的是responseXML属性,html返回是一个String对象,而xml 返回的是一个XML对象。操作返回值的时候就大不相同,必须按照XML对象的方式进行操作,如果用alert(),结果肯定是object,相关的操作可 以看看xml document 对象属性手册(附件)。xml和html不一样,定义很严格,没有容错机制,如果被请求的xml写的不正确,或者是不完整,jQuery抛出一个异 常,Ajax请求终止。
示例代码:
$.ajax({
url:'my.xml',
type: 'GET',
dataType: 'xml',
timeout: 3000,
error: function(xml){
alert('Error loading XML document'+xml);
},
success: function(x){
alert(x.xml);//xml的xml属性只在IE下支持
}
});
6.4.3 json方式
json方式和html方式在请求和服务器中完全是一样,就不在重复说明,请求的返回值实际 上都是String对象,有两点不同,第一:html方式的时候并没有限制返回的字符串格式,而json方式的时候,必须符合json协议的规范。第 二:html方式请求完成之后没有做任何的操作直接回调sucuess,而json多了一步就是加了eval,执行返回的字符串,看看源码data = eval("(" + data + ")");返回json对象。
示例代码:
$.ajax({
url:'my.js',//{‘name’:’name’,’test’:’test’}
type: 'GET',
dataType: json,
timeout: 3000,
error: function(xml){
alert('Error loading XML document'+xml);
},
success: function(data){
$.each(data,function(i,n){
alert(n);//显示name和test
});
}
});
6.4.4 js方式
js方式和jsonp方式应该严格意义上不属于Ajax范畴,属于浏览器对含有src属性标 签的二次请求原理。当然这里只用了script标签,工作原理就是在head中创建一个script标签,src属性就是url,浏览器自动加载js文 件,并执行(不缓存,只执行一次)。由于他不是真正意义上的Ajax,所以jQuery定义的全局Ajax事件并不能完全触发,只能触发两个事件 ajaxSuccess和ajaxComplete。
示例代码:
$.ajax({
url:'my.js',//alert(‘test’)
type: 'GET',
dataType: script,
timeout: 3000,
success: function(data){
alert(‘load js success’);
}
});
6.4.5 jsonp方式
jsonp方式的交互方式和js是一样的,本身xmlHttpRequest对象并不能跨域 访问,但是script标签的src可以跨域访问,这里就注意两个概念:第一Ajax是不能跨域操作的,第二jQuery的jsonp是可以跨域操 作,jsonp到底是什么东西呢?他是一个非官方的定义,目前的规范,需要服务器和客户端进行配合使用,服务器返回必须是这样的格式:
xxx(json对象);xxx是客户端定义的函数名字.
客户端需要这样的定义格式url?callback=xxx,这个的callback和xxx都是自己定义,只要服务器端能理解即可。如果没有定义xxx函数默认是?,jQuery会自动将?替换成内部定义的函数jquery12345678990这样的形式。
为什么需要这样定义呢?因为js本身不能操作script标签src请求结果中的数据(如果想操作就需要用DOM获得innerText再加上eval)。就定义一个客户端函数,将请求的结果以参数的形式传递进去,就可以操作了。
示例代码:
jsonp.php
<?php
echo $_GET[‘callback’].“({‘name’,’name’});”;
jsonp.aspx
Response.Write(Request["callback "] + "({'name': 'name'});");
jquery代码
$.ajax({
url:' jsonp.php?callback=test',//alert(‘test’)
type: 'GET',
dataType: jsonp,
timeout: 3000,
success: function(data){
alert(‘load jsonp success’);
}
});
function test(data){
alert(data);
}
6.5 jQuery中ajax全局事件的应用
大家看到这个题目的时候可能有点糊涂,ajax还有事件?答案是否定的。只是jQuery为 了控制Ajax的流程,比如停止,监听当前的状态等等而自己定义的事件,这个事件说简单点就是自定义函数,在Ajax执行不同状态调用,作者形象的定义成 事件和触发事件,实际就是函数和调用函数,jQuery共定义了 ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend6个事件,下边就逐个 介绍。
6.5.1 ajaxStart
在调用Ajax的时候首先就会触发该事件,Ajax计数器加1,不传递任何参数。
源码:jQuery.event.trigger( "ajaxStart" );
6.5.2 ajaxStop
Ajax执行到complete最后的时候触发该事件,Ajax计数器减1,不传递任何参数。
源码:jQuery.event.trigger( "ajaxStop" )
6.5.3 ajaxComplete
Ajax执行到complete后边触发ajaxStop之前时候触发该事件,传递数组对象,包含两个元素第一是当前的XMLHttpRequest对象,第二个是当前Ajax的属性对象,这个可以参考前边的ajax参数列表。
源码jQuery.event.trigger( "ajaxComplete", [xhr, s] );//xhr就是当前的XMLHttpRequest对象,s就是Ajax的属性对象
6.5.4 ajaxError
捕获到XMLHttpRequest异常的时候会触发该事件,传递数组对象,包含三个元素第一是当前的XMLHttpRequest对象,第二个是当前Ajax的属性对象,这个可以参考前边的ajax参数列表,第三个是错误代码。
源码:jQuery.event.trigger( "ajaxError", [xhr, s, e] );
6.5.5 ajaxSuccess
Ajax执行到success最后的时候触发该事件,传递数组对象,包含两个元素第一是当前的XMLHttpRequest对象,第二个是当前Ajax的属性对象,这个可以参考前边的ajax参数列表。
源码:jQuery.event.trigger( "ajaxSuccess", [xhr, s] );
6.5.6 ajaxSend
执行beforeSend之后,XMLHttpRequest调用send之前,触发该事件,传递数组对象,包含两个元素第一是当前的XMLHttpRequest对象,第二个是当前Ajax的属性对象,这个可以参考前边的ajax参数列表。
源码:jQuery.event.trigger("ajaxSend", [xhr, s]);
最后我们举个简单的例子,就应该明白如果使用这些事件控制整个Ajax流程了,比如一个页面 上有三给Ajax请求(都是异步请求),但是需求是不能锁住浏览器还要Ajax顺序执行,意思就是第一个Ajax执行完成之后才执行第二个,再执行第三 个,如果有一个异常,其他的Ajax也不需要请求,这样的情况的时候这些事件就派上用场了。
示例代码:
var AjaxStack=[];//Ajax等待执行队列(先进先出)
$(document).ajaxSuccess(function(o,s){
AjaxStack.shift();
});
$(document).ajaxComplete(function(){
var tmp=AjaxStack.shift();
if(tmp){
$(tmp[0]).loading(tmp[1],tmp[2],tmp[3]);
}
});
$.fn.loading function(u, opt, f){
AjaxStack.push([this,u,opt,f]);
if($.active){
return;
}
$.ajax({
data: opt,
type: "get",
url: u,
beforeSend: function(XMLHttpRequest){
//加一些效果测试是不是顺序执行的
},
success: function(data, textStatus){
//sucuss
},
complete: function(XMLHttpRequest, textStatus){
//complete
}
});
}
$(‘#test1’).loading(‘test1.html’);
$(‘#test2’).loading(‘test2.html’);
$(‘#test3’).loading(‘test3.html’);
注意,在Ajax 全部事件申明的时候,也是jQuery 对象,但是该对象不起任何作用,只是为了能访问到,所以说$(document).ajaxComplete(function(){}) 和$(‘#test1’).ajaxComplete(function(){}) 是等价的。为了命名规范你可以定义成和Ajax 调用的对象是一致,但是没有任何实际意义,从触发的源码中应该看出,他用的是全局对象jQuery 。
6.6小结
本章主要讲的是jQuery的Ajax使用方法,其中涉及到其他的知识点比如XML属性,请查看相应的手册,其中做很多示例代码并不能直接运行,属于伪代码,请不要直接copy出来运行。
前边的函数描述和后边的返回方式有部分是重复的,如果只是基础的应用,就没有必要看后半部分的返回方式了,如果想进一步研究jQuery和JS代码,可以看看,不一定准确,但是多少有点帮助,主要还是以源代码中的代码为基准,您可以有自己的定义和理解。
由于时间的原因,很多地方用词和描述都不是很理想,还希望读到的人能给予批评和指正,感激不尽!(IT农民 2008年8月5日13:50:21)
评论
另外,不知道load可以设置同步、异步否???
相关推荐
【jQuery的Ajax应用】 jQuery是JavaScript的一个库,它极大地简化了JavaScript的使用,包括处理Ajax交互。Ajax在jQuery中的应用让开发者能够实现无刷新的数据交换,提升了用户体验,减少了页面加载时间,同时也使得...
jQuery 的Ajax应用 jQuery操作表格 jQuery插件
资源名称:J2EE中JSON Jquery_AJAX应用 中文PDF版内容简介:本文档主要讲述的是J2EE中JSON Jquery_AJAX应用;主要是描述使用JSON JQuery_AJAX实现页面动态加载与页面表单数据的异步保存。首先页面通过调用JQuery_...
本实例将深入探讨如何在Asp.Net MVC项目中应用jQuery与AJAX。 一、jQuery简介 jQuery是一个轻量级的JavaScript库,它简化了DOM操作、事件处理、动画设计以及Ajax交互。在Asp.Net MVC项目中,jQuery可以帮助开发者更...
在标题“vue基本环境+jquery ajax应用”中,我们可以理解为这个压缩包可能包含了一个基本的Vue开发环境,并展示了如何结合jQuery的AJAX功能来处理数据请求。 Vue的基本环境通常包括Vue的核心库、Vue CLI(命令行...
本篇文章将深入探讨jQuery中的Ajax应用,包括`$.ajax()`和`.load()`两种常用的方法。 首先,我们来看一下`response.setContentType()`,这是一个在服务器端设置HTTP响应头的方法,用于指定发送到客户端的数据类型。...
资源名称:jQuery与Ajax教程 WORD版内容简介:本文档是jQuery与Ajax教程;jQuery确实是一个挺好的轻量级的JS框架,能帮助我们快速的开发JS应用,并在一定程度上改变了我们写Javascript代码的习惯。希望本文档...
**jQuery和Ajax技术详解*...总结,jQuery和Ajax的结合大大提高了Web应用的用户体验,使得网页能够在不刷新的情况下与服务器进行通信。通过学习和实践这些基本的Ajax功能,开发者能够构建出更加动态和响应式的网页应用。
【基于jQuery的Ajax聊天室程序】是一个典型的Web交互应用,它利用了Ajax技术来实现实时的、无需页面刷新的用户交流。Ajax(Asynchronous JavaScript and XML)是一种在不重新加载整个网页的情况下,能够更新部分网页...
本示例"Jquery跨域Ajax请求测试"将详细讲解如何利用jQuery实现这一功能。 首先,了解同源策略是理解跨域问题的关键。同源策略是浏览器为了保障用户安全而设定的一项机制,它规定了只有来自同一协议、同一域名和同一...
工作之余写的一些Ajax应用,有6个Demo,数据库为mysql,使用之前看readme.txt。javascript与jquery混用。无刷新购物车、输入提示、表格局部刷新、xml实时数据更新、划词解释。
在"JQuery实战2:功能表单 - JQuery - AJAX - JavaEye论坛.files"这个压缩包中,可能包含了相关的代码示例和论坛讨论,你可以下载并参考这些资料,以便更好地理解和应用jQuery与Ajax的结合使用。 总结来说,jQuery...
当我们谈论Ajax与jQuery的ajax方法与SSH框架的集成时,实际上是在讨论如何在前端使用jQuery的Ajax功能与后端SSH框架进行通信,实现数据的无刷新交互。 首先,jQuery的`$.ajax()`方法是核心工具,它允许我们发起异步...
6. Struts2与Ajax的集成,使用JQuery的$.ajax()或$.getJSON()方法 7. 请求与响应的处理,包括参数传递和数据封装 8. 实例演示:使用Struts2+Jquery+Ajax实现动态加载数据或表单验证 "struts2 jar"文件包含了Struts2...
本实例聚焦于"jQuery-AJAX",这是一项核心功能,用于在不刷新整个页面的情况下与服务器交换数据并更新部分网页内容。AJAX(异步JavaScript和XML)技术在现代Web开发中扮演着关键角色,而jQuery的ajax方法则提供了...
四、Ajax应用场景 Ajax常用于实现网页的无刷新更新,例如,动态加载内容、表单验证、实时搜索建议等。通过Ajax,你可以创建更加流畅、用户友好的交互体验,提高网站性能和用户体验。 五、jQuery与Ajax结合实战 结合...
在IT行业中,前端开发是构建动态网页应用的关键环节,而jQuery和AJAX是其中不可或缺的工具。本篇文章将深入探讨如何使用jQuery与AJAX技术来实现一个简单的用户名验证功能,以此来确保用户输入的用户名的独特性。这个...
在“第八章后jQueryAjax的使用”中,我们将深入探讨如何利用jQuery进行AJAX操作。 **AJAX基础** AJAX(Asynchronous JavaScript and XML)是一种创建动态网页的技术,允许在不重新加载整个页面的情况下,与服务器...