Ajax学习(一)

本文详细介绍了Ajax的应用原理和技术细节,包括如何使用JavaScript、DHTML和DOM技术实现与服务器的异步交互,具体步骤涉及创建XMLHttpRequest对象、发送请求、处理响应等。
一、概述
None.gifAjax 由 HTML、JavaScript™ 技术、DHTML 和 DOM 组成,这一杰出的方法可以将笨拙的 Web 界面转化成交互性的 Ajax 应用程序。
None.gif顺便说一下,Ajax 是 Asynchronous JavaScript and XML(以及 DHTML 等)的缩写。这个短语是 Adaptive Path 的 Jesse James Garrett 发明的(请参阅 参考资料),按照 Jesse 的解释,这不是 个首字母缩写词。
None.gif
None.gif下面是 Ajax 应用程序所用到的基本技术:
None.gif
None.gifHTML 用于建立 Web 表单并确定应用程序其他部分使用的字段。 
None.gifJavaScript 代码是运行 Ajax 应用程序的核心代码,帮助改进与服务器应用程序的通信。 
None.gifDHTML 或 Dynamic HTML,用于动态更新表单。我们将使用 div、span 和其他动态 HTML 元素来标记 HTML。 
None.gif文档对象模型 DOM 用于(通过 JavaScript 代码)处理 HTML 结构和(某些情况下)服务器返回的 XML。 
二、创建对象
ExpandedBlockStart.gifContractedBlock.gif/**//* 以支持多种浏览器的方式创建 XMLHttpRequest 对象*/
ExpandedBlockStart.gifContractedBlock.gif
/**//* Create a new XMLHttpRequest object to talk to the Web server */
None.gif
var xmlHttp = false;
ExpandedBlockStart.gifContractedBlock.gif
/**//*@cc_on @*/
ExpandedBlockStart.gifContractedBlock.gif
/**//*@if (@_jscript_version >= 5)
InBlock.giftry {
InBlock.gif  xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
InBlock.gif} catch (e) {
InBlock.gif  try {
InBlock.gif    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
InBlock.gif  } catch (e2) {
InBlock.gif    xmlHttp = false;
InBlock.gif  }
InBlock.gif}
ExpandedBlockEnd.gif@end @
*/

ExpandedBlockStart.gifContractedBlock.gif
if (!xmlHttp && typeof XMLHttpRequest != 'undefined') dot.gif{
InBlock.gif  xmlHttp 
= new XMLHttpRequest();
ExpandedBlockEnd.gif}

None.gif
None.gif<script language="javascript" type="text/javascript">
None.gif
var request;
ExpandedBlockStart.gifContractedBlock.gif
function createRequest() dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif  
try dot.gif{
InBlock.gif    request 
= new XMLHttpRequest();
ExpandedSubBlockStart.gifContractedSubBlock.gif  }
 catch (trymicrosoft) dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif    
try dot.gif{
InBlock.gif      request 
= new ActiveXObject("Msxml2.XMLHTTP");
ExpandedSubBlockStart.gifContractedSubBlock.gif    }
 catch (othermicrosoft) dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif      
try dot.gif{
InBlock.gif        request 
= new ActiveXObject("Microsoft.XMLHTTP");
ExpandedSubBlockStart.gifContractedSubBlock.gif      }
 catch (failed) dot.gif{
InBlock.gif        request 
= false;
ExpandedSubBlockEnd.gif      }

ExpandedSubBlockEnd.gif    }

ExpandedSubBlockEnd.gif  }

InBlock.gif  
if (!request)
InBlock.gif    alert(
"Error initializing XMLHttpRequest!");
ExpandedBlockEnd.gif}

None.gif
</script>
None.gif

三、发送请求
None.gif所有 Ajax 应用程序中基本都雷同的流程:
None.gif1.从 Web 表单中获取需要的数据。 
None.gif2.建立要连接的 URL。 
None.gif3.打开到服务器的连接。 
None.gif4.设置服务器在完成后要运行的函数。 
None.gif5.发送请求。 

ExpandedBlockStart.gifContractedBlock.giffunction callServer() dot.gif{
InBlock.gif  
// 从表单中获取城市和地区
InBlock.gif
  var city = document.getElementById("city").value;
InBlock.gif  
var state = document.getElementById("state").value;
InBlock.gif  
// 两者都有内容时提交
InBlock.gif
  if ((city == null|| (city == "")) return;
InBlock.gif  
if ((state == null|| (state == "")) return;
InBlock.gif  
// Build the URL to connect to
InBlock.gif
  var url = "/scripts/getZipCode.php?city=" + escape(city) + "&state=" + escape(state);
InBlock.gif  
// 打开服务器连接
InBlock.gif
  xmlHttp.open("GET", url, true);
InBlock.gif  
// 当服务器返回后调用此函数
InBlock.gif
  xmlHttp.onreadystatechange = updatePage;
InBlock.gif  
// 发送请求
InBlock.gif
  xmlHttp.send(null);
ExpandedBlockEnd.gif}

None.gif
四、处理响应
None.gif1.什么也不要做,直到 xmlHttp.readyState 属性的值等于 4。 
None.gif2.服务器将把响应填充到 xmlHttp.responseText 属性中。 
ExpandedBlockStart.gifContractedBlock.giffunction updatePage() dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif  
if (xmlHttp.readyState == 4dot.gif{
InBlock.gif    
var response = xmlHttp.responseText;
InBlock.gif    document.getElementById(
"zipCode").value = response;
ExpandedSubBlockEnd.gif  }

ExpandedBlockEnd.gif}
ExpandedBlockStart.gifContractedBlock.gif   function updatePage() dot.gif{
InBlock.gif     
if (request.readyState == 4)
InBlock.gif       
if (request.status == 200)
InBlock.gif         alert(
"Server is done!");
InBlock.gif       
else if (request.status == 404)
InBlock.gif         alert(
"Request URL does not exist");
InBlock.gif       
else
InBlock.gif         alert(
"Error: status code is " + request.status);
ExpandedBlockEnd.gif   }

None.gif

五、连接web表单
None.gif<form>
None.gif 
<p>City: <input type="text" name="city" id="city" size="25" 
None.gif       onChange
="callServer();" /></p>
None.gif 
<p>State: <input type="text" name="state" id="state" size="25" 
None.gif       onChange
="callServer();" /></p>
None.gif 
<p>Zip Code: <input type="text" name="zipCode" id="city" size="5" /></p>
None.gif
</form>
None.gif

附一、XMLHttpRequest 简介

要真正实现这种绚丽的奇迹,必须非常熟悉一个 JavaScript 对象,即 XMLHttpRequest。这个小小的对象实际上已经在几种浏览器中存在一段时间了,它是本专栏今后几个月中要介绍的 Web 2.0、Ajax 和大部分其他内容的核心。为了让您快速地大体了解它,下面给出将要用于该对象的很少的几个 方法和属性。

  • open():建立到服务器的新请求。
  • send():向服务器发送请求。
  • abort():退出当前请求。
  • readyState:提供当前 HTML 的就绪状态。
  • responseText:服务器返回的请求响应文本。

现在应该 了解的是,明确用 XMLHttpRequest 做什么。要注意这些方法和属性都与发送请求及处理响应有关。事实上,如果看到 XMLHttpRequest 的所有方法和属性,就会发现它们 与非常简单的请求/响应模型有关。显然,我们不会遇到特别新的 GUI 对象或者创建用户交互的某种超极神秘的方法,我们将使用非常简单的请求和非常简单的响应。听起来似乎没有多少吸引力,但是用好该对象可以彻底改变您的应用程序。
附二、深入了解 HTTP 就绪状态

0:请求未初始化(还没有调用 open())。 1:请求已经建立,但是还没有发送(还没有调用 send())。 2:请求已发送,正在处理中(通常现在可以从响应中获取内容头)。 3:请求在处理中;通常响应中已有部分数据可用了,但是服务器还没有完成响应的生成。 4:响应已完成;您可以获取并使用服务器的响应了。

转载于:https://www.cnblogs.com/mjgforever/archive/2007/07/17/821365.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值