ajax入门详解

转自:http://04101334.iteye.com/blog/631257?page=2#comments

 

l 一个实例

在开始正式讲解 Ajax之前,首先让我们先来看看Google Map使用Ajax改善其产品设计的效果。

1.  在浏览器地址栏中输入http://maps.google.com打开Google Map的界面。

2.  在页面顶端的搜索框中输入“China”,单击“Search”按钮。

3.  单击地图右上角的“Satellite”按钮,切换到卫星界面。

4.  调整地图左上角的尺寸,方法或者缩小当前区域。可以看到,地图区域的图象根据标尺的位置快速的变换。

5.  按住鼠标左键,拖拽地图,地图区域的图象随着鼠标的移动而移动这个过程的图象是实时更新的。效果如下图所。



 

 

 

由上可以明显的看出,当用户拖动地图进行操作的时候,Web页上的地图立即发生相应的变化,页面却没有刷新,当按住鼠标左键移动地图的时候,地图跟着移动,这个过程是快速的,而期间用户没有想服务器提交表单或和单击一个超链接。如果用传统的Web应用程序交互思维来理解,这个过程是难以理解的,这正是Ajax的魅力。

l什么是Ajax?

在研究ajax之前首先让我们先来讨论一个问题 ——什么是Web 2.0 。听到 Web 2.0 这个词的时候,应该首先问一问 “Web 1.0 是什么?” 虽然很少听人提到 Web 1.0,实际上它指的就是具有完全不同的请求和响应模型的传统 Web。比如,到 hdu.edu.cn 网站上点击一个按钮。就会对服务器发送一个请求,然后响应再返回到浏览器。该请求不仅仅是新内容和项目列表,而是另一个完整的 HTML 页面。因此当 Web 浏览器用新的 HTML 页面重绘时,可能会看到闪烁或抖动。事实上,通过看到的每个新页面可以清晰地看到请求和响应。

  Web 2.0(在很大程度上)消除了这种看得见的往复交互。比如在 Google Maps 上,你可以拖动地图,放大和缩小,只有很少的重绘操作。当然这里仍然有请求和响应,只不过都藏到了幕后。作为用户,体验更加舒适,感觉很像桌面应用程序。这种新的感受和范型就是当有人提到 Web 2.0 时您所体会到的。

  需要关心的是如何使这些新的交互成为可能。显然,仍然需要发出请求和接收响应,但正是针对每次请求/响应交互的 HTML 重绘造成了缓慢、笨拙的 Web 交互的感受。因此很清楚,我们需要一种方法使发送的请求和接收的响应只 包含需要的数据而不是整个 HTML 页面。惟一需要获得整个新 HTML 页面的时候就是希望用户看到 新页面的时候。

  但多数交互都是在已有页面上增加细节、修改主体文本或者覆盖原有数据。这些情况下,Ajax 和 Web 2.0 方法允许在不 更新整个 HTML 页面的情况下发送和接收数据。对于那些经常上网的人,这种能力可以让您的应用程序感觉更快、响应更及时,让他们不时地光顾您的网站。

 

因此在这里,我们是时候可以对ajax做出一个完整的解释了,Adaptive Path公司的Jesse James Garrett这样定义Ajax

  Ajax不是一种技术。实际上,它由几种蓬勃发展的技术以新的强大方式组合而成。Ajax包含:

  • 基于XHTMLCSS标准的表示; 
  • 使用Document Object Model进行动态显示和交互; 
  • 使用XMLHttpRequest与服务器进行异步通信; 
  • 使用JavaScript绑定一切。 

这非常好,但为什么要以Ajax命名呢?其实术语Ajax是由Jesse James Garrett创造的,他说它是“Asynchronous JavaScript + XML的简写”。

l      Ajax工作原理

通过上述的定义,我们应该已经知道Ajax的组成了,即他是由XHTML,XML,CSS,DOM,XMLHttpRequest,JavaScript等技术综合而成的,然而,真正使用Ajax能实现异步通信,要真正实现这种绚丽的奇迹,必须非常熟悉一个JavaScript 对象,即 XMLHttpRequest。因此我们要了解Ajax的工作原理,就要从理解XMLHttpRequest这个对象开始。

下面给出将要用于该对象的很少的几个 方法和属性。

  ·open():建立到服务器的新请求。

     ·send():向服务器发送请求。

     ·abort():退出当前请求。

  
  ·readyState:提供当前 HTML 的就绪状态。

  
  ·responseText:服务器返回的请求响应文本。

‘onreadystatechange:回调方法

 ·responseXML:服务器返回的请求响应XML形式组织的文本。

  下面我们简单的介绍一下这几个方法的作用。

l         创建一个XMLHttpRequest

     首先需要创建一个新变量并赋给它一个 XMLHttpRequest 对象实例。这在 JavaScript 中很简单,只要对该对象名使用 new 关键字即可,如下代码所示。

script language="javascript" type="text/javascript"
 var request = new XMLHttpRequest();
/script
  在 JavaScript 中用 var 创建一个变量,给它一个名字(如 “request”),然后赋给它一个新的 XMLHttpRequest 实例。此后就可以在函数中使用该对象了。
  错误处理
  在实际上各种事情都可能出错,而上面的代码没有提供任何错误处理。较好的办法是创建该对象,并在出现问题时优雅地退出。比如,任何较早的浏览器都不支持 XMLHttpRequest,您需要让这些用户知道有些地方出了问题。下面js代码通过创建getXMLHttpRequest()方法说明如何创建该对象。

代码1:一个详细的XMLHttpRequest对象的创建

script language="javascript" type="text/javascript"

function getXMLHttpRequest(){
 var request = false;
 try {

 request = new XMLHttpRequest();
 } catch (trymicrosoft) {
  try {
   request = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (othermicrosoft) {
   try {
    request = new ActiveXObject("Microsoft.XMLHTTP");
   } catch (failed) {
    request = false;
   }
  }
 }
 return request;

}
/script
  一定要理解这些步骤:
  创建一个新变量 request 并赋值 false。后面将使用 false 作为判定条件,它表示还没有创建 XMLHttpRequest 对象。
  ·增加 try/catch 块:
  ·尝试创建 XMLHttpRequest 对象。
    1、如果失败(catch (failed))则保证 request 的值仍然为 false。
    2、检查 request 是否仍为 false(如果一切正常就不会是 false)。
  ·如果出现问题则request 返回 false。

此外,在上面的代码中,我们是不是注意到了一个问题,就是当request = new XMLHttpRequest();出现异常的时候,在catch语句中我们用了request = new ActiveXObject("Msxml2.XMLHTTP");request = new ActiveXObject("Microsoft.XMLHTTP");等语句进行对象获取,这是针对IE浏览器而进行的操作,因为IE浏览器对 XMLHttpRequest 版本有不同的称呼。事实上,它将其称为几种 不同的东西。如果使用较新版本的 Internet Explorer,则需要使用对象 Msxml2.XMLHTTP,而较老版本的 Internet Explorer 则使用 Microsoft.XMLHTTP。我们需要支持这两种对象类型(同时还要支持非 Microsoft 浏览器)。

l         用 XMLHttpRequest 发送请求
  得到请求对象之后就可以进入请求/响应循环了。记住,XMLHttpRequest 惟一的目的是让您发送请求和接收响应。其他一切都是 JavaScriptCSS 或页面中其他代码的工作:改变用户界面、切换图像、解释服务器返回的数据。准备好 XMLHttpRequest 之后,就可以向服务器发送请求了。
  Ajax 采用一种沙箱安全模型。因此,Ajax 代码(具体来说就是 XMLHttpRequest 对象)只能对所在的同一个域发送请求。如果让 Ajax 代码在www.hdu.edu.cn 上运行,则必须 www.hdu.edu.cn 中运行的脚本发送请求。
  设置服务器 URL
  首先要确定连接的服务器的 URL。这并不是 Ajax 的特殊要求,但仍然是建立连接所必需的。多数应用程序中都会结合一些静态数据和用户处理的表单中的数据来构造该 URL。比如,下列 JavaScript 代码获取电话号码字段的值并用其构造 URL。

代码2: 建立请求 URL

script language="javascript" type="text/javascript"
function getCustomerInfo() {
 var phone = document.getElementById("phone").value;
 var url = "/cgi-local/lookupCustomer.jsp?phone=" + escape(phone);
}
/script
  首先,代码创建了一个新变量 phone,并把 ID 为 “phone” 的表单字段的值赋给它。下列代码展示了这个表单的 XHTML,其中可以看到 phone 字段及其 id 属性。   

代码3 Break Neck Pizza 表单

body
 <form action="POST"
  <pEnter your phone number:
   <input type="text" size="14" name="phone" id="phone" onChange="getCustomerInfo();" /
  </p
  <pYour order will be delivered to:/p
  <div id="address"></div
  <pType your order in here:/p
  <p><textarea name="order" rows="6" cols="50" id="order"></textarea></p
  <p><input type="submit" value="Order Pizza" id="submit" /></p
 </form
/body
  还要注意,当用户输入电话号码或者改变电话号码时,将触发getCustomerInfo() 方法。该方法取得电话号码并构造存储在 url 变量中的 URL 字符串。由于 Ajax 代码是沙箱型的,因而只能连接到同一个域,实际上 URL 中不需要域名。该例中的脚本名为 /cgi-local/lookupCustomer.jsp。最后,电话号码作为 GET 参数附加到该脚本中:"phone=" + escape(phone)。 
  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值