AJAX全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。
主要包含了以下几种技术:
Ajax(Asynchronous JavaScript + XML)的定义 。
基于web标准(standards-based presentation)XHTML+CSS的表示;
使用 DOM(Document Object Model)进行动态显示及交互;
使用 XML 和 XSLT 进行数据交换及相关操作;
使用 XMLHttpRequest 进行异步数据查询、检索;
使用 JavaScript 将所有的东西绑定在一起。英文参见Ajax的提出者Jesse James Garrett的原文a 。
类似于DHTML或LAMP,AJAX不是指一种单一的技术,而是有机地利用了一系列相关的技术。事实上,一些基于AJAX的“派生/合成”式(derivative/composite)的技术正在出现,如“AFLAX”。
AJAX的应用使用支持以上技术的web浏览器作为运行平台。这些浏览器目前包括:Mozilla、Firefox、Internet Explorer、Opera、Konqueror及Safari。但是Opera不支持XSL格式对象,也不支持XSLT。
与传统的web应用比较
传统的web应用允许用户填写表单(form),当提交表单时就向web服务器发送一个请求。服务器接收并处理传来的表单,然后返回一个新的网页。这个做法浪费了许多带宽,因为在前后两个页面中的大部分HTML代码往往是相同的。由于每次应用的交互都需要向服务器发送请求,应用的响应时间就依赖于服务器的响应时间。这导致了用户界面的响应比本地应用慢得多。
与此不同,AJAX应用可以仅向服务器发送并取回必需的数据,它使用SOAP或其它一些基于XML的web service接口,并在客户端采用JavaScript处理来自服务器的响应。因为在服务器和浏览器之间交换的数据大量减少,结果我们就能看到响应更快的应用。同时很多的处理工作可以在发出请求的客户端机器上完成,所以Web服务器的处理时间也减少了。
Ajax应用程序的优势在于:
1. 通过异步模式,提升了用户体验。
2. 优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用。
3. Ajax引擎在客户端运行,承担了一部分本来由服务器承担的工作,从而减少了大用户量下的服务器负载。
===========================================。
英文名称:Ajax
粤语译音:阿积士
成立时间:1900年3月18日 。
所在国家:荷兰
所在城市: 阿姆斯特丹
俱乐部教练:腾卡特(Ten cate)。
主球场:阿姆斯特丹阿雷纳球场 。
主队服: 红百间条上衣
昵称:
联系地址:Arena Boulevard 29 1101 AX Amsterdam 。
官方网址:http://www.ajax.nl/。
俱乐部详细资料
就像西甲的皇家马德里一样,阿贾克斯是荷兰最久负盛名的球队。它的诞生是由一群志同道合的朋友在业余时间组成的,经过100多年的努力,该俱乐部以其漂亮和富有进攻力的打法举世闻名。阿贾克斯一共夺取过27次荷兰联赛的冠军和25次重要国际比赛的冠军,其中4次欧洲冠军杯。
1900年3月18日斯坦普、达德和里瑟有感于各个小俱乐部鱼龙混杂,管理混乱,在阿姆斯特丹号召人们成立了一个统一的足球俱乐部,从而也宣告了阿贾克斯一支伟大球队的诞生。
阿贾克斯成立至今,赢得了无数的奖杯和荣誉,他们曾在18/19赛季和95/96赛季两次以不败战绩捧得当年的联赛冠军。在1929-1939十年间,阿贾克斯迎来了该俱乐部历史上第一个辉煌时期,在这期间他们一共获得7次联盟冠军(地区性冠军)和5次荷兰联赛冠军。
在经历过近三十年的低迷后,70年代荷兰掀起了全攻全守足球的狂潮,这给后来的荷兰足球及世界足坛都带来了深远的影响。作为荷兰足球的代表阿贾克斯自然更是推崇备至。从1971年到1973年,阿贾克斯连续3年夺得欧洲冠军杯,成为继皇家马德里后第二支上演冠军杯帽子戏法的球队,同时他们也进入了历史上的第二个辉煌时期。
高潮过后,阿贾克斯的许多功勋球员或退休或离队,这直接导致了该队在70年代后期的持续低迷。但1981-1987年阿贾克斯又卷土重来了,他们3次夺得荷兰联赛和杯赛的双冠王。当时大名鼎鼎的克鲁伊夫和帮助AC米兰称霸欧洲的荷兰三剑客(古利特、范·巴斯滕和里杰卡尔德)都曾先后在阿贾克斯效力,他们为该队夺得无数荣誉立下了汗马功劳。
从1991年到1997年,一个名叫范加尔的荷兰人带领阿贾克斯又再次走向了高潮。而之前,人们对他一无所知,但很快他用一个又一个的奖杯证明了自己的实力。1995年5月24日,一支由里杰卡尔德、戴维斯、西多夫、克鲁伊维特和博格坎普组成的阿贾克斯在冠军杯决赛中击败了当时如日中天的AC米兰,第4次夺得欧洲冠军杯。此外,范加尔的球队还在93/94、94/95、95/96赛季三度称雄荷甲,91/92赛季夺得联盟杯冠军和92/93赛季夺得荷兰杯冠军等等,为阿贾克斯书写了光辉的一页。
天下没有不散的筵席,扬名立万后阿贾克斯队中的大牌球星们纷纷出国淘金。球队在经过短暂的阵痛后,又一批年轻球员成长了起来。他们夺得了01/02赛季荷甲联赛冠军,也在02/03赛季冠军杯中成功杀入8强,让人们重新看到了这支球队的希望。
阿贾克斯历来非常注重年轻球员的培养,他们很少购买国外球员,所依赖的都是自己的子弟兵,尽管这些子弟兵一旦成名后很快会被外国大俱乐部高薪挖走,但阿贾克斯凭借源源不断的强大后备力量依然屹立在欧洲一流强队的行列中。在刚刚结束的02/03赛季欧洲冠军杯1/4决赛上,由一群初出茅庐的小伙子组成的阿贾克斯把群星荟萃的AC米兰搞的狼狈不堪,后来夺冠的红黑军团只是幸运的凭借英扎吉的灵光一现才勉强过关。这支青年军能够杀进八强,引来了许多大俱乐部艳羡的目光,并足以使拜仁慕尼黑等强队汗颜。
尽管在02/03赛季他们仅以1分之差将联赛冠军让给了希丁克统率的埃因霍温,但他们的出色表现已引起了整个欧洲的注意。在即将来临的新赛季,无论阿贾克斯取得了多大的荣誉都不需要感到吃惊,因为他们是一支充满朝气,不可限量的青年军。
使用Ajax的主要过程包括
1、创建XMLHttpRequest对象,
2、设置回发函数,
3、指定信息发送位置、提交的方式和异步与否,
4、发送请求。
javaScript代码如下所示:
1: <script type="text/javascript">。
2: var XMLHttpRequestIns = null;。
3:
4: function AjaxF() {。
5: //创建Ajax核心对象并传递参数。
6: CreateXMLHttpRequest();。
7: //设置参数
8: XMLHttpRequestIns.onreadystatechange = handleStateChange;//设置回发函数。
9: //获取内容的位置
10: XMLHttpRequestIns.open("GET", "XMLFile1.xml", true);。
11: //发送
12: XMLHttpRequestIns.send(null);。
13: }
14: function CreateXMLHttpRequest() {。
15: if (window.ActiveObject) {。
16: XMLHttpRequestIns = new ActiveXObject("Microsoft.XMLHTTP");。
17: }
18: else if(window.XMLHttpRequest )。
19: {
20: XMLHttpRequestIns = new XMLHttpRequest();。
21: }
22: }
23: //对返回数据进行处理。
24: function handleStateChange() {。
25: if (XMLHttpRequestIns.readyState == 4) {。
26:
27: if (XMLHttpRequestIns.status == 200) {。
28: alert("服务器消息" + XMLHttpRequestIns.responseText);。
29: }
30: }
31: }
32: </script>。
定义这样一个数组:
roomType = new Array();。
roomType[0] = new Array(1, "01,02,03,04,05,06,07,08");。
roomType[1] = new Array(2, "11,12,13,14,15,16,17,18");。
roomType[2] = new Array(3, "21,22,23,24,25,26,27,28");。
roomType[3] = new Array(4, "41,42,43,44,45,46,47,48");。
根据传过来的$q的值来得到roomtype[$q],再得到roomtype[$q][1].split(','),然后传给第二个下拉框 。
其实你现在的问题就是把获取到的json数组循环插入到下拉框里面,这个你到网上找一下吧,JS循环填充下拉框的代码如下:
for (j = 0; j < tmpcityArray.length; j++) {。
//填充 城市 下拉选单。
document.getElementById(cid).options[document.getElementById(cid).length] = new Option(tmpcityArray[j],j);。
}
11,把AjaxPro.dll放入应用程序之bin文件夹中,并添加参照。
22,修改web.config。
4在system.web节点下添加。
6<SYSTEM.WEB>。
7 <HTTPHANDLERS>。
8<ADD type="AjaxPro.AjaxHandlerFactory, AjaxPro" path="ajaxpro/*.ashx" verb="POST,GET" />。
9</HTTPHANDLERS>。
10
11
123,在后台cs文件中声明ajax。
13namespace MyDemo。
14{
15 public class _Default。
16 {
17 protected void Page_Load(object sender, EventArgs e)。
18 {
19 AjaxPro.Utility.RegisterTypeForAjax(typeof(_Default));。
20 }
21
22 [AjaxPro.AjaxMethod]。
23 public int GetAdd(int a,int b)。
24 {
25 return a+b; }。
26 }
27}
28
293、在客户端用javascript调用服务器端之方法,语法也很简单。
30
31function get()。
32{
33 var a=4;
34 var b=5;
35 MyDemo._Default.GetAdd(a, b ,get_callback); //调用后台函数。
36}
37
38
39function get_callback(res) //返回值处理函数。
40{
41 alert(res.value);。
42}
43
44就这样,简单之几步,就已经完成了。在客户端用javascript异步调用服务器端之C#方法,并可以得到服务器端之返回值,这个值会传到javascript,javascript可以处理这个返回之值,现在返回的是一个简单的整型,不过,我们也可以返回复杂之数据类型,像DataTable之类,总之,AjaxPro把Ajax搞得很简单。
45
46
47补充:
48如果返回的是DataTable时的取值方式如下:
49dt.Rows[0].userid; 取得数据集中的字段名为userid的数据;
50dt.Rows.length; 取得数据集的行数;
下面的文章是从网络上找的,经过研究加以注释,这个例子非常简单,可作入门之用。
cf8ajax.cfm:
<cfprocessingdirective pageencoding=”utf-8〃>。
<cfajaxproxy cfc=”echo” jsclassname=”respond”>。
<html>
<head>
<script type=”text/javascript”>。
function getResponse() {。
//通过DOM方式获取表单中的文本。
var name = document.getElementById(’name’).value。
//实例化CFC, “respond”是组件echo在Javascript中的别名。
var r = new respond()。
//设置回调函数
r.setCallbackHandler(displayResponse)。
//如果发生错误,将执行此方法,如网络问题。
r.setErrorHandler(errorHandler)。
//调用组件方法
r.echo(name)
//没有问题,成功时的回调函数。
function displayResponse(resp) {。
document.getElementById(”responseArea”).innerHTML = resp。
//出现问题了,出错时的回调函数。
function errorHandler(statusCode,statusMsg) {。
alert(statusCode+’: ‘+statusMsg)。
</script>。
</head>
<body>
姓名:<input type=”text” id=”name” size=”10〃>。
<input type=”button” value=”告诉我” onclick=”getResponse()”><br />。
<span id=”responseArea”></span>。
</body>
</html>
echo.cfc ajax要调用的后台组件:
<cfcomponent>。
<cfprocessingdirective pageencoding=”utf-8〃>。
<cffunction name=”echo” access=”remote” returnFormat=”json” output=”false”>。
<cfargument name=”inputTxt” type=”String”>。
<cfset inputTxt = “Hi “&inputTxt&”, 最近好吗?”>。
<cfreturn inputTxt>。
</cffunction>。
</cfcomponent>。
Ajax的工作原理相当于在用户和服务器之间加了—个中间层,使用户操作与服务器响应异步化。这样把以前的一些服务器负担的工作转嫁到客户端,利于客户端闲置的处理能力来处理,减轻服务器和带宽的负担,从而达到节约ISP的空间及带宽租用成本的目的。
Ajax的核心是JavaScript对象XmlHttpRequest。该对象在Internet Explorer 5中首次引入,它是一种支持异步请求的技术。简而言之,XmlHttpRequest使您可以使用JavaScript向服务器提出请求并处理响应,而不阻塞用户。
在创建Web站点时,在客户端执行屏幕更新为用户提供了很大的灵活性。下面是使用Ajax可以完成的功能:
动态更新购物车的物品总数,无需用户单击Update并等待服务器重新发送整个页面。
提升站点的性能,这是通过减少从服务器下载的数据量而实现的。例如,在某购物车页面,当更新篮子中的一项物品的数量时,会重新载入整个页面,这必须下载整个页面的数据。如果使用Ajax计算新的总量,服务器只会返回新的总量值,因此所需的带宽仅为原来的百分之一。 消除了每次用户输入时的页面刷新。例如,在Ajax中,如果用户在分页列表上单击Next,则服务器数据只刷新列表而不是整个页面。
直接编辑表格数据,而不是要求用户导航到新的页面来编辑数据。对于Ajax,当用户单击Edit时,可以将静态表格刷新为内容可编辑的表格。用户单击Done之后,就可以发出一个Ajax请求来更新服务器,并刷新表格,使其包含静态、只读的数据。
一切皆有可能!但愿它能够激发您开始开发自己的基于Ajax的站点。然而,在开始之前,让我们介绍一个现有的Web站点,它遵循传统的提交/等待/重新显示的范例,我们还将讨论Ajax如何提升用户体验。