技术开发 频道

AJAX 老酒依然醇香



    AJAX 实战
    下面,我们通过具体的应用来体验一下如何集成 AJAX 和 Servlet,来增强 WEB 应用的敏捷性和与用户动态交互的能力,综合利用这两种分别处于客户端和服务器端的技术,可谓是当前WEB应用中一个理想的解决方案,该方案的框架图如下所示:

    下面,我们通过具体的应用来体验一下如何集成 AJAX 和 Servlet,来增强 WEB 应用的敏捷性和与用户动态交互的能力,综合利用这两种分别处于客户端和服务器端的技术,可谓是当前WEB应用中一个理想的解决方案,该方案的框架图如下所示:


图2 AJAX与Servlet的集成

    AJAX 的核心就是 XMLHttpRequest 对象,与传统的请求/响应模式不同,AJAX 是通过 AJAX 引擎与 Servlet 容器进行异步交互,而这一交互机制的具体细节可以通过下面的序列图来描述。


图3 AJAX与Servlet之间的异步交互

   首先是通过 JavaScript 事件处理函数创建 XMLHttpRequest 对象,该对象的创建根据不同浏览器有不同的方式,当然,我们需要一个健壮的程序来使之支持所有的浏览器,可以参考下面的代码:

var xmlHttp = false; try { xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e2) { xmlHttp = false; } } if (!xmlHttp && typeof XMLHttpRequest != 'undefined') { xmlHttp = new XMLHttpRequest(); }

    这样我们就可以支持多浏览器的XMLHttpRequest对象,它可以将用户在与浏览器交互过程中触发的AJAX请求发送到服务器端的Servlet组件,但是,一定要先进行相应的属性设置和方法调用,使其处于正确的就绪状态下。以下是一个发送AJAX 请求的JavaScript函数:

function SearchUser() { //获取 XMLHttpRequest对象xmlHttp,参见上述代码 xmlHttp.onreadystatechange = updateUser; //注册回调函数 xmlHttp.open("POST","servletUser.do", true); //异步请求servlet xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); //设置数据格式 var userID = document.getElementById("userID").value; //获取参数 xmlHttp.send("userID=" + userID); // 发送请求 }

    上面的函数 SearchUser() 是一个在表单控件中非常典型的 AJAX 请求发送函数,它实现了图3 中由1到7的一系列步骤。XMLHttpRequest 对象的 open() 方法实现了对服务器端的异步请求,而通过属性 onreadystatechange 注册的回调函数则根据请求处理的返回结果对页面进行相应更新,正是这种异步的请求/响应模式避免了用户等待服务器端处理请求的过程,提高了 WEB 应用的敏捷性和用户体验。

0
相关文章