在基于Mozilla的浏览器中使用XMLHttpRequest对象

IE通过允许开发人员在Web页面内部使用安全的ActiveX组件扩展自身的功能。微软在无状态连接方面的产品是XMLHTTP组件。

使用XMLHTTP组件,开发人员可以不用从当前的Web页面导航而直接传输数据到服务器上或者从服务器取数据。这个功能是重要的,因为它帮助减少了无状态连接的痛苦。它还可以排除下载冗余HTML的需要,从而提高进程的速度。

Mozilla做出的回应是创建它自己的继承XML代理类:XMLHttpRequest类。对于大多数情况,XMLHttpRequest对象的行为很像XMLHTTP组件。这就意味着你可以使用很多与XMLHTTP组件相同的帮助信息。方法和属性类似,然而,所有的方法和属性都是以小写字母开头,并且还有一些属性不支持。

下面是一个使用eXtensible Binding Language(XBL)将一个行为绑定到一个

1<input/>

元素来更新XML数据岛的简单例子。数据被发送到服务器处理。

xml_http.asp:

1@ Language=VBScript 
 1   
 2Response.Expires = -1   
 3If Request("action") = "update" Then   
 4Dim xml   
 5Set xml = Server.CreateObject("MSXML2.DOMDocument")   
 6xml.load Request   
 7Response.Writexml.xml   
 8Set xml = Nothing   
 9Response.End   
10End If   
 1<html>
 2<head>
 3<style>   
 4.linkedData {   
 5-moz-binding: url(link_data.xml#link);   
 6}   
 7</style>
 8<script language="JavaScript">   
 9<!--   
10function test() {   
11var xml = document.getElementById("xmlData");   
12if (xml != null) {   
13varxmlhttp = new XMLHttpRequest();   
14xmlhttp.open("POST", "xml_http.asp?action=update", false);   
15xmlhttp.send(xml.innerHTML);   
16alert(xmlhttp.responseText);   
17}   
18}   
19//-->   
20</script>
21</head>
22<body>
23<xml id="xmlData" name="xmlData" style="visibility:hidden;">
24<root>
25<link_data></link_data>
26</root>
27</xml>
28<form id="thisForm" name="thisForm">
29<input class="linkedData" id="txtLink" name="txtLink" size="25" type="text"/>
30<br/>
31<input onclick="test()" type="button" value="Test"/>
32</form>
33</body>
34</html>

link_data.xml:

 1<xbl:bindingsxmlns:xbl=" "="" http:="" www.mozilla.org="" xbl="">
 2<xbl:binding id="link">
 3<xbl:handlers>
 4<xbl:handler event="change">   
 5var xml = document.getElementById("xmlData");   
 6var root = xml.childNodes[1];   
 7varlink_data = root.childNodes[1];   
 8link_data.childNodes[0].nodeValue = event.originalTarget.value;   
 9</xbl:handler>
10</xbl:handlers>
11</xbl:binding>
12   
13
14
15  
16xml_http.asp文件创建一个XML数据岛,创建的数据岛有一个重要节点:link_data。而且,这个HTML的表现会创建一个文本框和一个用于创建发送XML数据给服务器的事件的按钮。 
17
18IE允许你嵌入XML数据岛并使用那个数据岛将绑定HTML元素到底层的数据。Mozilla靠XBL为每个元素创建行为。使用XBL,你可以为<input/>元素创建一个行为,所以在onChange事件发生时,“bound”XML节点就能够被更新。“linkedData”样式类通知Mozilla文件link_data.xml将要被用来创建绑定。这个类是在<input type="”text”" …=""/>元素中使用的。 
19
20如果你分析link_data.xml的代码,你会注意到onchange事件处理程序只是简单地获取XML数据岛的link_data节点然后更新text节点的值。对于这个解决方案这是一个非常简单的方法;它只在文本框中的值有改动之后才会更新数据。这不属于two-way绑定机制,因为如果节点的值改变了,其改变不会反映到文本框。 
21
22当用户点击Test按钮的时候,奇怪的事情发生了。一个新的XMLHttpRequest对象被创建用来向服务器改善XML数据。然后,就像XMLHTTP组件在IE中的工作方式一样,你使用open()方法打开远程页面。在这个例子中,我添加了一个查询字符串到xml_http.asp页面中,所以我可以使用同一个页面处理XML传输。使用send()方法,我传递xmlData数据岛的innerHTML。(在IE中,这与指定xmlData数据岛的XML属性一样)。 
23
24在xml_http.asp页面被装载时,它检查“action”参数是否传递给页面,并且那个参数是否等于“update”。如果是——就是在我们发出XMLHttpRequest请求的时候——它创建一个DOMDocument组件,从Request对象装载XML,然后返回DOMDocument的xml。Request对象暴露出IStream接口,允许DOMDocument直接从Request对象装载xml。(在另外一种语言中,你可以使用从HTTP请求中发送过来的POST数据。) 
25
26这是一个非常简单的例子,说明了Mozilla的XML能力。在Mozilla中操作XML的其中一个缺点就是文档不怎么样。不过上面已经提到过,对于绝大多数部分,你可以使用针对微软的XMLHTTP组件的文档。</xbl:bindingsxmlns:xbl=">
Published At
Categories with Web编程
Tagged with
comments powered by Disqus