作者:小炮兵开坦克 | 来源:互联网 | 2013-08-05 10:38
XMLHttpRequest对象提供了两个可以用来访问服务器响应的属性。第一个属性responseText将响应提供为一个串,第二个属性responseXML将响应提供为一个XML对象
XMLHttpRequest对象提供了两个可以用来访问服务器响应的属性。第一个属性responseText将响应提供为一个串,第二个属性responseXML将响应提供为一个XML对象。一些简单的用例就很适合按简单文本来获取响应,如将响应显示在警告框中,或者响应只是指示成功还是失败的词。
使用innerHTML属性创建动态内容
如果将服务器响应作为简单文本来访问,则灵活性欠佳。简单文本没有结构,很难用Javascript进行逻辑性的表述,而且要想动态地生成页面内容也很困难。
如果结合使用HTML元素的innerHTML属性,responseText属性就会变得非常有用。innerHTML属性是一个非标准的属性,最早在IE中实现,后来也为其他许多流行的浏览器所采用。这是一个简单的串,表示一组开始标记和结束标记之间的内容。
通过结合使用responseText和innerHTML,服务器就能“生产”或生成HTML内容,由浏览器使用innerHTML属性来“消费”或处理。下面的例子展示了一个搜索功能,这是使用XMLHttpRequest对象、其responseText属性和HTML元素的innerHTML属性实现的。点击search(搜索)按钮将在服务器上启动“搜索”,服务器将生成一个结果表作为响应。浏览器处理响应时将div元素的innerHTML属性设置为XMLHttpRequest对象的responseText属性值。
具体步骤如下:
1. 点击search按钮,调用startRequest函数,它先调用createXMLHttpRequest函数来初始化XMLHttpRequest对象的一个新实例;
2. startRequest函数将回调函数设置为handleStateChange函数;
3. startRequest函数使用open()方法来设置请求方法(GET)及请求目标,并且设置为异步地完成请求;
4. 使用XMLHttpRequest对象的send()方法发送请求;
5. XMLHttpRequest对象的内部状态每次有变化时,都会调用handleStateChange函数。一旦接收到响应(如果readyState属性的值为4),div元素的innerHTML属性就将使用XMLHttpRequest对象的responseText属性设置。
代码清单3-1显示了innerHTML.html。代码清单3-2显示了innerHTML.xml,表示搜索生成的内容。
代码清单3-1 innerHTML.html
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
Onclick="startRequest();"/>
代码清单3-2 innerHTML.xml
Activity Name |
Location |
Time |
---|
Waterskiing |
Dock #1 |
9:00 AM |
Volleyball |
East Court |
2:00 PM |
Hiking |
Trail 3 |
3:30 PM |
使用responseText和innerHTML可以大大简化向页面增加动态内容的工作。遗憾的是,这种方法存在一些缺陷。前面已经提到,innerHTML属性不是HTML元素的标准属性,所以与标准兼容的浏览器不一定提供这个属性的实现。不过,当前大多数浏览器都支持innerHTML属性。可笑的是,IE是率先使用innerHTML的浏览器,但它的innerHTML实现反而最受限制。如今许多浏览器都将innerHTML属性作为所有HTML元素的读/写属性。与此不同,IE则有所限制,在表和表行之类的HTML元素上innerHTML属性仅仅是只读属性,从一定程度上讲,这就限制了它的用途