Chinaunix首页 | 论坛 | 博客
  • 博客访问: 92255343
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-05-10 22:37:05

 

您将发现,第一次运行应用程序时有轻微的延迟现象。这是由 servlet 所需的初始启动时间造成的。该延迟会给用户造成不好的印象,因此在下一部分中,您将把同步 XmlHttpRequest 调用更改为异步调用。

使 Ajax 成为异步应用程序

异步请求允许应用程序用户在等待服务器响应的同时继续进行自己的工作。即使用户不能在服务器响应前继续自己的工作,使用异步请求的方法也比同步调用更有利。例如,为避免用户将注意力集中在按下的按钮上,您可以在屏幕上显示一些可供最终用户消遣的小部件,如进度条。这部分上机练习不会涉及到上述内容,我们仅把同步调用更改为异步调用。

1.

使用以下语句替换在 helloAjax.html 页面中定义 doTheAjaxThing() 函数的当前 JavaScript 语句,使请求成为异步调用:


当前的异步请求处理与前一个同步调用之间的差异以粗体突出显示。由于浏览器不等待服务器做出响应,此示例使用了 JavaScript 回调(状态改变时由 XMLHttpRequest 对象调用的函数)。涉及到的状态有四种,包括:

0
请求初始化,这是在 XmlHttRequestObject 上调用 open() 方法前的状态。
1
准备发送请求。
2
请求已发出,正在服务器上处理。
3
服务器处理请求。
4
响应完成,可供客户端进行进一步处理。

用户最关注的状态由状态值 4 指出。在上面的 JavaScript 函数中,为进行更好的读取,此数值被赋给 JavaScript 变量 READY_STATE_COMPLETE。不要混淆状态与状况。状态是 XmlHttpRequest 返回的值,而状况是 HTTP 代码,用于通知用户所请求的访问。例如,如果 requestObject 状况为 403,则用户访问了未被授权的服务器资源。此状况需要的客户端处理与状况为 200(指示成功的服务器访问)时的处理不同。

要使用 XmlHttprequest 对象注册 JavaScript 回调句柄 onReadyStateChangeResponse,您需要将其指定为 XmlHttpRequest onreadystate 方法 requestObject.onreadystatechange=onReadyStateChangeResponse 的值,上述方法是 XmlHttpRequest 对象公开的一个函数。

您可以随意为 JavaScript 函数 onReadyStateChangeResponse() 命名,但必须为 requestObject.onreadystatechange 赋予相同的名称。在读取返回的消息主体之前,您需要执行前面提及的检查,以确保就绪状态为 4、请求状况为 200。其余代码与前面示例中的代码相同。

2.

保存您的工作,然后运行应用程序。

 

图 8

 

注意,在此次执行时,从按下按钮到服务器响应仍存在延迟,但按钮会立即释放。


基本故障排除

使用 Javascript 时最常发生的问题是组件、变量名称的拼写错误以及对 DOM 组件上不存在属性的访问。您可以从免费获取 JavaScript 调试器。然而,要进行迅速、随性的调试,您可以使用 alert("test"); 或 document.write("test"); 语句在客户端打印信息。在服务器端,您可以使用 Oracle JDeveloper 调试器调试所访问的 Java 代码,也可以使用 System.out.println("test");。

阅读(389) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~