Ajax技术:构建动态的Java应用程序(1)(3)
列表5:Cart对象序列化得到的XML
如果你观察一下下载站点提供的例子应用源码中的Cart.Java,你将会看到它通过简单地追加字符串来生成XML。对于本例子来说,它已经足够了,我将会在本系统文章的以后一期中介绍一些更好的方法。
现在你知道了CartServlet如何响应一个XMLHttpRequest。下一步是返回到客户端,如何用服务器响应来更新页面状态。
通过JavaScript来处理服务器响应
XMLHttpRequest的readyState属性是一个给出请求生命周期状态的数字值。它从表示“未初始化”的0变化到表示“完成”的4。每次readyState改变时,都会引发readystatechange事件,通过onreadystatechange属性配置回调处理函数将会被调用。
在列表3中,你已看到通过调用函数getReadyStateHandler()创建了一个处理函数,并被配置给onreadystatechange属性。getReadyStateHandler()使用了这样的事实:函数是JavaScript中的主要对象。
这意味着,函数可以作为参数被传递到其它函数,并且可以创建并返回其它函数。getReadystateHandler()要做是就是返回一个函数,来检查XMLHttpRequet是否已经完成处理,并传递XML服务器响应到由调用者指定的处理函数。列表6是getReadyStateHandler()的代码。
列表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);
}
}
}
}
- 上一篇:循序渐进学习 Ajax 的途径
- 下一篇:Ajax驱动的Web站点