枫林在线论坛>>技术交流 [管理模式] [快速回复] [推荐给朋友]
[382555] 主题: Ajax铺设了更好的开发Web应用的道路(4)
作者: leaflet 标题:  Ajax铺设了更好的开发Web应用的道路(4)[转载]
昵称: Leaflet 来自: 192.168.*.* 详细
经验值: 105863 发贴时间: 2005年12月17日 11:14:59
等级: ★★★★★ 长度: 2481字
http://searchwebservices.techtarget.com.cn/tips/212/2179212_3.shtml 

Ajax铺设了更好的开发Web应用的道路

【2005-11-03 11:17】【】【赛迪网】

  列表5展示了由Cart.toXml()方法生成的XML。注意到生成的cart元素的属性,是一

个通过System.currentTimeMillis()生成的时间戳。

  列表5:Cart对象序列化得到的XML

<?xml version="1.0"?>
<cart generated="1123969988414" 
total="$171.95">
  <item code="hat001">
    <name>Hat</name>
    <quantity>2</quantity>
  </item>
  <item code="cha001">
    <name>Chair</name>
    <quantity>1</quantity>
  </item>
  <item code="dog001">
    <name>Dog</name>
    <quantity>1</quantity>
  </item>
</cart>

  如果你观察一下下载站点提供的例子应用源码中的Cart.Java,你将会看到它通过简

单地追加字符串来生成XML。对于本例子来说,它已经足够了,我将会在本系统文章的以

后一期中介绍一些更好的方法。

  现在你知道了CartServlet如何响应一个XMLHttpRequest。下一步是返回到客户端,

如何用服务器响应来更新页面状态。

  通过JavaScript来处理服务器响应

  XMLHttpRequest的readyState属性是一个给出请求生命周期状态的数字值。它从表

示“未初始化”的0变化到表示“完成”的4。每次readyState改变时,都会引发readys
t
atechange事件,通过onreadystatechange属性配置回调处理函数将会被调用。

  在列表3中,你已看到通过调用函数getReadyStateHandler()创建了一个处理函数,

并被配置给onreadystatechange属性。getReadyStateHandler()使用了这样的事实:函数

是JavaScript中的主要对象。

  这意味着,函数可以作为参数被传递到其它函数,并且可以创建并返回其它函数。
g
etReadystateHandler()要做是就是返回一个函数,来检查XMLHttpRequet是否已经完成

处理,并传递XML服务器响应到由调用者指定的处理函数。列表6是getReadyStateHandl
e
r()的代码。

  列表6:函数getReadyStateHandler()

/*
 * Returns a function that waits for
 the specified XMLHttpRequest
 * to complete, then passes its XML 
 response to the given handler function.
 * req - The XMLHttpRequest
 whose state is changing
 * responseXmlHandler - 
 Function to pass the XML response to
 */
function getReadyStateHandler(req,
responseXmlHandler) {
  // 返回一个监听XMLHttpRequest实例的匿名函数
  return function () 
  {
    // 如果请求的状态是“完成”
    if (req.readyState == 4) 
 {
      // 检查是否成功接收了服务器响应
      if (req.status == 200) 
   {
        // 将载有响应信息的XML传递到处理函数
        responseXmlHandler(req.responseXML);
      } else 
   {
        // 有HTTP问题发生
        alert("HTTP error: "+req.status);
      }
    }
  }
}

========== * * * * * ==========
Top

| 用户注册 | 在线用户 | 投票中心 | 常见问题 |

Copyright © 2001-2012 枫林在线(www.FengLin.info) All Rights Reserved
页面运行使用30.93毫秒