检索 XML
下一步就是编写一个 HTML 页面(如 清单 2 所示)从服务器读取数据并检验浏览器和服务器之间使用的 Ajax 连接。这段 HTML 代码包含内嵌的 JavaScript 代码,检索 XML 并打开一个警告窗口显示服务器返回的文本。
清单 2. 简单的 Ajax 读取数据页面
<html> <body> <script> function processReqChange() { if (req.readyState == 4 && req.status == 200 && req.responseXML != null) { alert( req.responseText ); } }
function loadXMLDoc( url ) { req = false; if(window.XMLHttpRequest) { try { req = new XMLHttpRequest(); } catch(e) { req = false; } } else if(window.ActiveXObject) { try { req = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { try { req = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) { req = false; } } } if(req) { req.onreadystatechange = processReqChange; req.open("GET", url, true); req.send(""); } }
loadXMLDoc( "http://localhost/kenburns/slides.php" ); </script>
</body> </html>
代码从指定的 URL 获取 XML 内容,然后 loadXMLDoc 函数启动 Ajax 请求。检索页面的请求异步发出并返回结果。请求完成后,对结果调用 processReqChange 函数。这里用 processReqChange 函数在警告窗口中显示 responseText 的函数值。在我的 Firefox 浏览器中调用该页面的结果如 图 4 所示。
图 4. 在警告窗口中显示的 XML

开局不错。毫无疑问,我们从服务器取回了 XML 数据。但是有必要指出几点。首先要注意 URL 使用了绝对路径,包括域名等等。对于 Ajax 来说这是唯一有效的 URL 格式。编写 Ajax JavaScript 代码的服务器代码总是创建有效的、完整格式的 URL。
这里不那么明显的另一点是 Ajax 的安全保护措施。JavaScript 代码不能请求任意的 URL。URL 的域名必须和该页面相同。在这里域名就是 localhost。但必须指出不能呈现 www.mycompany.com 的 HTML 但却让脚本从 data.mycompany.com 检索数据。域必须完全相同,包括子域名。
有趣的另一点是 loadXMLDoc 中的代码,似乎是费力地创建一个请求对象。为何这么麻烦呢?Internet Explorer 7 的预览版没有内建 XMLHTTPRequest 对象类型。因此必须使用 Microsoft ActiveX® 控件。
最后在 processReqChange 函数中,可以看到我在查看 readyState 是否等于 4,status 是否设为 200。readyState 的值 4 表示事务已经完成。status 的值 200 表示页面是有效的。如果没有找到页面,就可能会得到错误消息 404,就像您在浏览器中看到的那样。这里没有处理异常情况,因为这仅仅是一个例子,不过发布的 Ajax 代码应该处理返回错误的请求。
出处:IBM developerWorks
责任编辑:moby
上一页 用DHTML与XML制作Ajax幻灯片 [1] 下一页 用DHTML与XML制作Ajax幻灯片 [3]
◎进入论坛网络编程版块参加讨论
|