- 浏览: 263825 次
- 性别:
- 来自: 天津
文章分类
- 全部博客 (180)
- J2SE (15)
- J2EE (7)
- Struts (2)
- Hibernate (18)
- Spring (22)
- ssh (2)
- HTML (1)
- JS (10)
- CSS (3)
- jQuery (15)
- extJS (0)
- FLEX (14)
- Web service (7)
- Axis2 (3)
- lucene2.0 (9)
- maven (3)
- JBoss (0)
- WebLogic (0)
- Linux (8)
- Android (0)
- SiteMesh (1)
- JPA (0)
- JBPM (1)
- xFire (3)
- XML (4)
- apache (4)
- bingo专区 (0)
- 加密解密算法研究 (1)
- 数据库 (16)
- 资料 (1)
- 经验 (4)
- 健康 (1)
- 技术交流区 (1)
- 交友区 (0)
- jquery 插件区 (1)
最新评论
-
forrest_lv:
很有帮助
Axis2 XFire CXF 比较 -
kuloujianzun:
...
flex DataGrid -
zx.peng:
大哥,请教一下...
下面在别的地方引入:(在什么地方、怎么 ...
FLEX下拉多选框 -
elvislee030:
试试去,正好要找这个组件。。先谢过
FLEX下拉多选框 -
futrueboy:
如果你发到网上来,请翻译的好点
Apache Mina的学习应用(三)
5. jQuery中的ajax服务端返回方式
5.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(){
//请求出错处理
}
});
52 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下支持
}
});
53 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
});
}
});
5.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’);
}
});
5.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. jQuery中ajax全局事件的应用
大家看到这个题目的时候可能有点糊涂,ajax还有事件?答案是否定的。只是jQuery为了控制Ajax的流程,比如停止,监听当前的状态等等而自己定义的事件,这个事件说简单点就是自定义函数,在Ajax执行不同状态调用,作者形象的定义成事件和触发事件,实际就是函数和调用函数,jQuery共定义了ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend6个事件,下边就逐个介绍。
6.1 ajaxStart
在调用Ajax的时候首先就会触发该事件,Ajax计数器加1,不传递任何参数。
源码:jQuery.event.trigger( "ajaxStart" );
6.2 ajaxStop
Ajax执行到complete最后的时候触发该事件,Ajax计数器减1,不传递任何参数。
源码:jQuery.event.trigger( "ajaxStop" )
6.3 ajaxComplete
Ajax执行到complete后边触发ajaxStop之前时候触发该事件,传递数组对象,包含两个元素第一是当前的XMLHttpRequest对象,第二个是当前Ajax的属性对象,这个可以参考前边的ajax参数列表。
源码jQuery.event.trigger( "ajaxComplete", [xhr, s] );//xhr就是当前的XMLHttpRequest对象,s就是Ajax的属性对象
6.4 ajaxError
捕获到XMLHttpRequest异常的时候会触发该事件,传递数组对象,包含三个元素第一是当前的XMLHttpRequest对象,第二个是当前Ajax的属性对象,这个可以参考前边的ajax参数列表,第三个是错误代码。
源码:jQuery.event.trigger( "ajaxError", [xhr, s, e] );
6.5 ajaxSuccess
Ajax执行到success最后的时候触发该事件,传递数组对象,包含两个元素第一是当前的XMLHttpRequest对象,第二个是当前Ajax的属性对象,这个可以参考前边的ajax参数列表。
源码:jQuery.event.trigger( "ajaxSuccess", [xhr, s] );
6.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。
发表评论
-
jQuery性能优化指南(全部)- 最佳和非最佳實戰
2010-08-16 14:49 997jQuery性能优化指南(全部) 1,总是从ID选择器开始 ... -
防止jQuery Load使用缓存的方法
2010-08-16 14:47 1685一、用法 jquery的load函数是请求另一个文件并加 ... -
jQuery技巧实用大全
2010-08-16 14:44 704随着WEB2.0及 ajax思想在互联网上的快速发展传播 ... -
jQuery工具函数
2010-08-16 14:43 1137工具函数是指在jQuery ... -
jQuery-对Select的操作集合
2010-04-29 11:44 646jQuery获取Select选择的Text和Value: ... -
JQuery基础------一步一个脚印2
2010-01-15 13:59 6854.ajax应用 .load('a.html') ... -
JQuery基础------一步一个脚印
2010-01-14 17:24 10101.工厂函数 $() 标签名:$('p')取出文档中所有的 ... -
JQuery基本语法
2009-11-25 10:38 1785$( )选择器: 1。$('form :text,form ... -
jquery工作原理与优化3
2009-11-02 20:50 1477这篇就接着上一篇的话 ... -
jQuery选择的工作原理和优化2
2009-11-02 20:49 1768以前写过一篇优化的文 ... -
jQuery选择的工作原理和优化
2009-11-02 20:49 1423至于有那些选择器,在帮助手册中都有,自己去看,这篇主要是分析他 ... -
jQuery初解析(第三波)
2009-11-02 19:51 7994. $.ajax(options)的用法 这个是jQuer ... -
jQuery初解析(第二波)
2009-11-02 19:49 16433 jQuery中Ajax 在第一章提到Javascript ... -
jQuery初解析(第一波)
2009-11-02 19:46 8581 Ajax发展历史 AJAX全称为“Asynchronou ...
相关推荐
### Jquery解析json #### 知识点概览 1. **JSON介绍** 2. **jQuery与JSON数据交互** 3. **Struts2框架简介** 4. **JSON类库的选择与使用** 5. **服务器端Java程序编写** 6. **前端jQuery解析JSON数据** #### JSON...
4. **XML解析**:在JQuery中,可以使用`$.parseXML()`方法解析XML字符串。解析后的XML对象可以被遍历,获取所需的数据。例如,可以查找特定省份下的所有城市,然后填充到第二个下拉菜单。 5. **AJAX(异步...
通过分析"jQuery基础教程第四版源码",你可以看到这些概念如何在实际代码中体现,加深对jQuery的理解并提升实际开发技能。通过实践,你将能够熟练运用jQuery创建功能丰富的、交互性强的网页应用。
《jQuery基础教程(第四版)》是一本针对初学者和进阶者全面解析jQuery库的权威指南。本书详细介绍了如何利用jQuery简化JavaScript编程,提升网页交互体验。在本压缩包中,你将找到高清非扫描的PDF版本,保证了阅读...
**jQuery操作DOM解析** 在Web开发中,DOM(Document Object Model)是HTML或XML文档的结构化表示,它允许程序和脚本动态更新、添加、删除和改变元素。jQuery库简化了JavaScript对DOM的操作,提供了丰富的API来处理...
《精通jQuery(中文第二版)》是一本深入探讨jQuery库的专著,旨在帮助读者全面理解和熟练运用这一广泛使用的JavaScript库。jQuery简化了HTML文档遍历、事件处理、动画设计和Ajax交互,使得Web开发更为高效。这本书...
### jQuery插件开发全解析知识点 #### 1. jQuery插件开发概述 在jQuery插件开发中,开发者可以创建两种类型的插件:类级别的插件和对象级别的插件。类级别的插件允许开发者为jQuery对象添加新的全局函数,类似于在...
《锋利的jQuery++第2版》是一本深入解析jQuery技术的权威著作,旨在帮助读者全面掌握这个广泛使用的JavaScript库。这本书的清晰版确保了读者在学习过程中能无碍地理解内容,而附带的源码则为实践提供了便利,让读者...
【JS与JQuery实战:第7章上机练习解析】 在深入探讨JavaScript和JQuery的知识点之前,我们先了解一下这两个核心概念。JavaScript是一种广泛应用于Web开发的编程语言,它允许我们在网页上实现动态效果和交互功能。而...
**jQuery JSON 省市区街道四级联动地址选择插件** 在网页开发中,尤其是在电子商务网站或者需要用户填写详细地址的应用中,四级联动地址选择插件是一个常见且实用的功能。它通常包括省、市、区(县)和街道四个级别...
JQuery解析XML数据的几个简单实例中,JQuery是JavaScript的一个库,它简化了JavaScript编程。在处理XML数据方面,JQuery提供了一套非常便捷的方法来解析和操作XML文档。XML是“可扩展标记语言”(Extensible Markup ...
《jQuery第二版源码解析》 jQuery,作为一款广受欢迎的JavaScript库,为开发者提供了简单易用的API,使得DOM操作、事件处理、动画效果以及AJAX交互等任务变得轻而易举。当我们深入到jQuery的源码,不仅可以理解其...
《jQuery 1.11.3:核心特性与应用解析》 jQuery,作为一款广泛使用的JavaScript库,极大地简化了DOM操作、事件处理、动画制作以及Ajax交互等任务,深受前端开发者的喜爱。在这个主题中,我们将深入探讨jQuery ...
《锋利的jQuery》(第2版)是一本专注于jQuery库深入学习的书籍,它针对JavaScript框架中的jQuery进行了详尽的解析和实例演示。这本书旨在帮助开发者提高在网页开发中的效率,通过简洁的代码实现复杂的交互效果。...
根据提供的文件信息,我们可以推断出这是一本关于jQuery技术的书籍——《精通jQuery 第2版》。本书旨在帮助读者深入了解并掌握jQuery这一流行的JavaScript库的使用方法与技巧。接下来,我们将围绕这本书籍的主要内容...
4. **jQuery.ajax()**:这是最底层的AJAX函数,允许更多的控制和自定义。它可以处理所有类型的HTTP请求,包括GET和POST,以及PUT、DELETE等。你可以设置各种选项,如请求类型、数据格式、错误处理等。例如: ```...
《锋利的jQuery第2版》是一本深入探讨jQuery库的专著,旨在帮助开发者更好地理解和运用这个强大的JavaScript工具。本书源码的提供是为了让读者能够结合实际代码加深理解,进一步提升开发技能。以下是根据书中的核心...
总结起来,"JQuery通用四级级联"是结合了jQuery的DOM操作、事件处理、Ajax异步加载和JSON数据解析等多种技术,实现了一种高效、灵活的用户交互组件。在实际应用中,开发者可以根据具体需求对其进行定制和扩展。
《jQuery Dialog 深度解析与实践应用》 在Web开发领域,jQuery Dialog是一款非常流行的JavaScript库,用于创建可交互的对话框。它基于jQuery框架,提供了丰富的功能和灵活的定制选项,使得开发者能够轻松地在网页上...
《锋利的jQuery小例子解析》 在编程领域,jQuery是一个广泛应用的JavaScript库,它极大地简化了DOM操作、事件处理、动画制作以及Ajax交互。本文将深入探讨“锋利的jQuery第三章例子”中涉及的关键知识点,通过分析...