1
html方式
这种方式是最常见的方式(默认方式),如果是IE7下执行和FireFox的对象是一样的,XMLHttpRequest,上边我们讲了有onreadystatechanage事件,readyState属性,当是html形式返回的时候,用到了另外一个属性responseText,当readyState=4的时候,XMLHttpRequest对象自动将放回的值以字符串的形式赋值给该属性(这个不是jQuery的功能,是XMLHttpRequest),jQuery返回该字符串(这里如果返回值中有JS代码,并不执行),执行
sucuess回调函数,比如html()、append()等等,这些函数讲html代码装载到当前页面的时候才执行其中包含的js代码,而且该代码只执行一次并不缓存。详细的说明请看文件操作函数说明。
示例代码:
$.ajax({
});
2 xml方式
xml方式和html方式的整个工作流程是一样,就是操作了不同的属性,返回不同的对象,html方式操作的responseText属性,而xml方式操作的是responseXML属性,html返回是一个String对象,而xml
返回的是一个XML对象。操作返回值的时候就大不相同,必须按照XML对象的方式进行操作,如果用alert(),结果肯定是object,相关的操作可以看看xml document 对象属性手册(附件)。xml和html不一样,定义很严格,没有容错机制,如果被请求的xml写的不正确,或者是不完整,jQuery抛出一个异常,Ajax请求终止。
示例代码:
$.ajax({
});
3 json方式
示例代码:
$.ajax({
});
4 js方式
示例代码:
$.ajax({
url:'http://www.duteba.com/my.js',
//alert(‘test’)
type: 'GET',
dataType: script,
timeout: 3000,
success: function(data){
alert(‘load js success’);
}
});
});
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({
});
function test(data){
}
6 jQuery中ajax全局事件的应用
在调用Ajax的时候首先就会触发该事件,Ajax计数器加1,不传递任何参数。
源码:jQuery.event.trigger( "ajaxStart" );
Ajax执行到complete最后的时候触发该事件,Ajax计数器减1,不传递任何参数。
源码:jQuery.event.trigger( "ajaxStop" )
Ajax执行到complete后边触发ajaxStop之前时候触发该事件,传递数组对象,包含两个元素第一是当前的XMLHttpRequest对象,第二个是当前Ajax的属性对象,这个可以参考前边的ajax参数列表。
源码jQuery.event.trigger( "ajaxComplete", [xhr, s] );//xhr就是当前的XMLHttpRequest对象,s就是Ajax的属性对象
捕获到XMLHttpRequest异常的时候会触发该事件,传递数组对象,包含三个元素第一是当前的XMLHttpRequest对象,第二个是当前Ajax的属性对象,这个可以参考前边的ajax参数列表,第三个是错误代码。
源码:jQuery.event.trigger( "ajaxError", [xhr, s, e] );
Ajax执行到success最后的时候触发该事件,传递数组对象,包含两个元素第一是当前的XMLHttpRequest对象,第二个是当前Ajax的属性对象,这个可以参考前边的ajax参数列表。
源码:jQuery.event.trigger( "ajaxSuccess", [xhr, s] );
执行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){
});
$(document).ajaxComplete(function(){
});
$.fn.loading function(u, opt, f){
}
$(‘#test1’).loading(‘test1.html’);
$(‘#test2’).loading(‘test2.html’);
$(‘#test3’).loading(‘test3.html’);
注意,在Ajax 全部事件申明的时候,也是jQuery 对象,但是该对象不起任何作用,只是为了能访问到,所以说$(document).ajaxComplete(function(){}) 和$(‘#test1’).ajaxComplete(function(){})
是等价的。为了命名规范你可以定义成和Ajax 调用的对象是一致,但是没有任何实际意义,从触发的源码中应该看出,他用的是全局对象jQuery 。
文章出自:http://blog.sina.com.cn/s/blog_618592ea0100nvyg.html
本文详细介绍了Ajax的多种使用方式,包括html、xml、json、js和jsonp方式,并解释了它们的工作流程和区别。同时,文章还深入探讨了jQuery中Ajax全局事件的应用,如ajaxStart、ajaxStop、ajaxComplete等,通过实例代码展示了如何利用这些事件控制整个Ajax流程。
1789

被折叠的 条评论
为什么被折叠?



