正 文

基于JMX通知框架的AJAX深度开发


www.7dspace.com  更新日期:2005-12-27 7:28:33  七度空间


  七、 管理状态的AJAX请求

  要使浏览器客户端支持AJAX,需要具备如下:

  ·main.jsp-被装配的JSP页面,它能够检查(JMX)警告状态并向服务器查询警告。这个.jsp文件包括admin.js

  ·admin.js-这是一个JavaScript实用程序,它使用XMLHttpRequest来向服务器查询管理状态,分析XML响应,并且重画屏幕的"status"区域

  被包含在main.jsp中的JavaScript描述如下:

<script type="text/javascript" src="./js/admin.js" ></script>

   不是连续地查询,而是只有启动浏览器警告功能时我们才进行查询。我们使用UserWebMBeanHelper来检查这个功能。如果该功能被启动,那么当页面加载时,JavaScript函数initAdmin()将被调用:

<%
if (MBeanHelperFactory.getWebHelper().isAlertEnabled()) {
%>
<body bgcolor="#F4FFE4" onload="initAdmin();">
<%
} else {
%>
<body bgcolor="#F4FFE4">
<%
}
%>

  重画的'status'屏幕区域定义如下:

<span id="adminBanner" class="style1"></span>

  "adminBanner"将被使用来标记可重画的区域-当分析XML响应并提取消息时。

  这个initAdmin()方法调度一个JavaScript方法trapAlert()-这个方法在callbackTimeout毫秒后执行:

function setCallback() {
 callBack = setTimeout('trapAlert()',callbackTimeout);
}
function initAdmin() {
 setCallback();
}

  注意,是由trapAlert()方法来实现启动XMLHttpRequest:

function trapAlert() {
 if (window.XMLHttpRequest) {
  req = new XMLHttpRequest();
 } else if (window.ActiveXObject) {
  req = new ActiveXObject("Microsoft.XMLHTTP");
 }
 req.onreadystatechange = processRequest;
 req.open("GET", './admin?reqid=0', true);
 req.send(null);
}

  在此,HTTP GET用来读数据(只使用了一个小的请求参数),并且目标是admin servlet。这个请求是异步的,并且当请求状态变化时,processRequest JavaScript函数被调用:

req.onreadystatechange = processRequest;

  在继续处理前等待一个响应,这看上去似乎非常合理;然而,如果一个网络或服务器问题导致一个事务无法完成,那么你要冒着使你的脚本挂起来的危险。相比之下,一个相应于onreadystatechange事件的异步调用更为灵活些。

  在请求完成时,processRequest事件处理器被调用:

function processRequest() {
 if (req.readyState == 4) {
  if (req.status == 200) {
   parseMessages();
  }
  ....
  setCallback();//只有完成时才这样做
 }
}

  列表1(见下载源码)显示了所有可用的状态码。当请求完成并且返回HTTP状态代码200(OK)时,parseMessages()方法被调用以从 XML消息中提取数据。然后,再次调度trapAlert()方法。如果XML响应有一个不同的重试间隔,那么这个值会由parseMessages() 函数设置。

7页,页码:[1] [2] [3] [4] [5] [6] [7] 

上一篇:使用AJAX技术开发新一代Web应用程序
下一篇:Spring Framework中的AOP编程之入门篇
作者:朱先忠编译  来源:天极网 ( 责任编辑:7dspace )
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐