`
isiqi
  • 浏览: 16338986 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

jQuery中的ajax服务端返回方式(转)

阅读更多

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.duteba.com/",
dataType: "html",//(可以不写,默认)
beforeSend: function(XMLHttpRequest){
//ShowLoading();
},
success: function(data, textStatus){
alert(data);//data是一个字符串对象
},
complete: function(XMLHttpRequest, textStatus){
//HideLoading();
},
error: function(){
//请求出错处理
}
});
2 xml方式
xml方式和html方式的整个工作流程是一样,就是操作了不同的属性,返回不同的对象,html方式操作的responseText属性,而xml方式操作的是responseXML属性,html返回是一个String对象,而xml 返回的是一个XML对象。操作返回值的时候就大不相同,必须按照XML对象的方式进行操作,如果用alert(),结果肯定是object,相关的操作可以看看xml document 对象属性手册(附件)。xml和html不一样,定义很严格,没有容错机制,如果被请求的xml写的不正确,或者是不完整,jQuery抛出一个异常,Ajax请求终止。
示例代码:
$.ajax({
url:'http://www.duteba.com/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下支持
}
});
3 json方式
json方式和html方式在请求和服务器中完全是一样,就不在重复说明,请求的返回值实际上都是String对象,有两点不同,第一:html方式的时候并没有限制返回的字符串格式,而json方式的时候,必须符合json协议的规范。第二:html方式请求完成之后没有做任何的操作直接回调sucuess,而json多了一步就是加了eval,执行返回的字符串,看看源码data = eval_r("(" + data + ")");返回json对象。
示例代码:
$.ajax({
url:'http://www.duteba.com/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
});
}
});
4 js方式
js方式和jsonp方式应该严格意义上不属于Ajax范畴,属于浏览器对含有src属性标签的二次请求原理。当然这里只用了script标签,工作原理就是在head中创建一个script标签,src属性就是url,浏览器自动加载js文件,并执行(不缓存,只执行一次)。由于他不是真正意义上的Ajax,所以jQuery定义的全局Ajax事件并不能完全触发,只能触发两个事件 ajaxSuccess和ajaxComplete。
示例代码:
$.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({
url:' http://www.duteba.com/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个事件,下边就逐个介绍。
1 ajaxStart
在调用Ajax的时候首先就会触发该事件,Ajax计数器加1,不传递任何参数。
源码:jQuery.event.trigger( "ajaxStart" );
2 ajaxStop
Ajax执行到complete最后的时候触发该事件,Ajax计数器减1,不传递任何参数。
源码:jQuery.event.trigger( "ajaxStop" )
3 ajaxComplete
Ajax执行到complete后边触发ajaxStop之前时候触发该事件,传递数组对象,包含两个元素第一是当前的XMLHttpRequest对象,第二个是当前Ajax的属性对象,这个可以参考前边的ajax参数列表。
源码jQuery.event.trigger( "ajaxComplete", [xhr, s] );//xhr就是当前的XMLHttpRequest对象,s就是Ajax的属性对象
4 ajaxError
捕获到XMLHttpRequest异常的时候会触发该事件,传递数组对象,包含三个元素第一是当前的XMLHttpRequest对象,第二个是当前Ajax的属性对象,这个可以参考前边的ajax参数列表,第三个是错误代码。
源码:jQuery.event.trigger( "ajaxError", [xhr, s, e] );
5 ajaxSuccess
Ajax执行到success最后的时候触发该事件,传递数组对象,包含两个元素第一是当前的XMLHttpRequest对象,第二个是当前Ajax的属性对象,这个可以参考前边的ajax参数列表。
源码:jQuery.event.trigger( "ajaxSuccess", [xhr, s] );
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-ajax示例含客户端和服务端源码(可运行

    在jQuery中,`$.ajax()`函数是进行异步请求的核心方法。它的基本语法如下: ```javascript $.ajax({ url: 'server-side-script', type: 'GET'或'POST', dataType: 'json'或'html'等, data: {key1: value1, key2...

    Jquery跨域Ajax请求测试

    在"JqueryWebServiceTestDemo"这个示例中,可能包含了完整的前端HTML、CSS和JavaScript文件,以及可能的服务端接口文档或示例代码,用于演示如何在实际项目中运用jQuery进行跨域Ajax请求。通过学习和运行这个示例,...

    利用Ajax+Jquery实现异步进度条效果

    在现代Web应用中,用户体验是至关重要的,而异步加载和实时反馈机制是提升用户体验的有效方式之一。"利用Ajax+Jquery实现异步进度条效果"这个主题正是围绕这一目标展开,它涉及到C#后端开发、.NET框架、Ajax技术以及...

    通用数据访问层及Ajax服务端框架源码20110907

    3. 所有Ajax技术的客户端全部基于JQuery,服务端则使用我的Ajax服务端框架 4. 客户端UI使用JQuery Easy-UI 5. 虽然没有使用Asp.net MVC框架,但却使用了MVC思想。 通用数据访问层 及 Ajax服务端框架 的技术特性: ...

    jquery中ajax处理跨域的三大方式

    在jQuery中,处理跨域请求是一个常见的问题,因为AJAX请求默认也受限于同源策略。为了解决这个问题,业界总结出多种方法,文章主要介绍了三种: 第一种方式是通过代理服务器来转发AJAX请求。代理服务器和前端页面...

    jQuery通过Ajax向PHP服务端发送请求并返回JSON数据

    JSON(JavaScript Object ...本文将通过实例演示了jQuery通过Ajax向PHP服务端发送请求并返回JSON数据。阅读本文的读者应该具备jQuery、Ajax、PHP相关知识,并能熟练运用。 XHTML &lt;li&gt;&lt;a&gt;张三&lt;/a&gt;&lt;/li&gt; &lt;li

    Jquery ajax和as3调用WCF服务端方法实例代码

    标题中的“Jquery ajax和as3调用WCF服务端方法实例代码”涉及到的是Web开发中的两种客户端技术(jQuery AJAX和ActionScript 3,AS3)与Windows Communication Foundation(WCF)服务之间的交互。WCF是.NET Framework...

    jQuery Based Ajax.Net library-m

    例如,你可以使用jQuery的$.ajax()方法发起一个请求,参数中指定URL为.NET服务器端的方法,然后在success回调中处理返回的数据。在服务器端,可以通过实现WebMethod或PageMethod来处理这些请求,返回JSON或XML格式的...

    jquery ajax 三级联动

    在ASP.NET开发中,jQuery和AJAX技术常常用于创建交互性强、用户体验良好的Web应用程序。"三级联动"是一种常见的功能,特别是在处理地理位置数据时,如省、市、区的选择。在这个场景下,用户选择一个省份后,相关的...

    java程序使用jquery AJAX

    Java程序与jQuery AJAX的结合是Web开发中常见的一种技术组合,用于实现页面的无刷新更新。在本篇文章中,我们将深入探讨如何在Java后端与前端利用jQuery的AJAX功能进行交互,提升用户体验。 首先,jQuery是一个强大...

    通用数据访问层及Ajax服务端框架源码

    【标题】"通用数据访问层及Ajax服务端框架源码" 涉及的主要知识点包括数据访问技术、Ajax服务端框架以及源码分析。 【数据访问技术】:数据访问层(Data Access Layer, DAL)是应用程序中负责与数据库交互的部分,...

    通用数据访问层及Ajax服务端框架的综合示例

    在IT行业中,构建高效、可复用的软件架构是至关重要的。...通过对这些知识点的深入学习,你可以更好地理解和利用"通用数据访问层及Ajax服务端框架的综合示例",并将其应用于自己的项目中,提升开发效率和应用质量。

    jquery+Ajax+Handler

    【jQuery + Ajax + Handler】是Web开发中的一个经典组合,用于构建动态、交互性强的网页应用。这个模板提供了一个基于HTML的权限管理系统,无需依赖微软的特定控件,完全使用前端JavaScript库jQuery和后端处理程序...

    J2EE中JSON+Jquery_AJAX应用[定义].pdf

    在J2EE开发中,JSON(JavaScript Object Notation)和JQuery_AJAX的结合使用是实现页面动态加载和异步数据交互的关键技术。JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。JQuery_...

    jQuery Ajax向服务端传递数组参数值的实例代码

    在本文中,我们将详细探讨如何使用jQuery Ajax向服务端传递数组参数值,以帮助你更好地理解和应用这些技术。 首先,让我们回顾一下问题的核心:在ASP.NET MVC框架下,向控制器的Action方法发送一个包含数组的POST...

    Jquery 封装下的ajax异步加载

    在本项目中,Servlet接收来自jQuery AJAX请求的数据,并返回JSON响应。一个简单的Servlet示例: ```java import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter...

    jquery文本框自动补全ajax autocomplete 完整实例

    在本文中,我们将深入探讨如何使用jQuery实现一个基于Ajax的文本框自动补全功能,以及相关的`autocomplete`插件的完整实例。这个功能在许多Web应用程序中非常常见,它能够提高用户输入的效率和用户体验。 首先,让...

    ajax WCF jquery ajax WCF jquery

    在"ajax WCF jquery"的场景中,开发者通常会利用jQuery的AJAX函数与WCF服务进行交互。例如,使用`$.ajax()`或`$.getJSON()`方法发起请求,向WCF服务发送数据并接收返回的响应。WCF服务端则需要配置允许跨域访问...

    jquery树形展示服务端目录结构树组件

    本文将深入探讨“jQuery树形展示服务端目录结构树组件”,这是一个利用jQuery实现的功能,用于在前端展示服务器的目录结构,使得用户可以直观地浏览和操作文件系统。 首先,我们要了解的核心知识点是jQuery ...

Global site tag (gtag.js) - Google Analytics