AJAX 可用来与 XML 文件进行交互式通信。
下面的实例将演示网页如何通过 AJAX 从 XML 文件读取信息:
当用户在上面的下拉列表中选择某张 CD 时,会执行名为 "showCD()" 的函数。该函数由 "onchange" 事件触发:
< html > < head > < script > function showCD(str) { if (str=="") { document.getElementById("txtHint").innerHTML=""; return; } if (window.XMLHttpRequest) { // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行 xmlhttp=new XMLHttpRequest(); } else { // IE6, IE5 浏览器执行 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("txtHint").innerHTML=xmlhttp.responseText; } } xmlhttp.open("GET","getcd.php?q="+str,true); xmlhttp.send(); } </ script > </ head > < body > < form > Select a CD: < select name = "cds" onchange = "showCD(this.value)" > < option value = "" >Select a CD:</ option > < option value = "Bob Dylan" >Bob Dylan</ option > < option value = "Bonnie Tyler" >Bonnie Tyler</ option > < option value = "Dolly Parton" >Dolly Parton</ option > </ select > </ form > < div id = "txtHint" >< b >CD info will be listed here...</ b ></ div > </ body > </ html > |
showCD() 函数会执行以下步骤:
上面这段通过 JavaScript 调用的服务器页面是名为 "getcd.php" 的 PHP 文件。
PHP 脚本加载 XML 文档,"cd_catalog.xml":
<? xml version = "1.0" encoding = "ISO-8859-1" ?> <!-- Edited by XMLSpy® --> < CATALOG > < CD > < TITLE >Empire Burlesque</ TITLE > < ARTIST >Bob Dylan</ ARTIST > < COUNTRY >USA</ COUNTRY > < COMPANY >Columbia</ COMPANY > < PRICE >10.90</ PRICE > < YEAR >1985</ YEAR > </ CD > < CD > < TITLE >Hide your heart</ TITLE > < ARTIST >Bonnie Tyler</ ARTIST > < COUNTRY >UK</ COUNTRY > < COMPANY >CBS Records</ COMPANY > < PRICE >9.90</ PRICE > < YEAR >1988</ YEAR > </ CD > < CD > < TITLE >Greatest Hits</ TITLE > < ARTIST >Dolly Parton</ ARTIST > < COUNTRY >USA</ COUNTRY > < COMPANY >RCA</ COMPANY > < PRICE >9.90</ PRICE > < YEAR >1982</ YEAR > </ CD > < CD > < TITLE >Still got the blues</ TITLE > < ARTIST >Gary Moore</ ARTIST > < COUNTRY >UK</ COUNTRY > < COMPANY >Virgin records</ COMPANY > < PRICE >10.20</ PRICE > < YEAR >1990</ YEAR > </ CD > < CD > < TITLE >Eros</ TITLE > < ARTIST >Eros Ramazzotti</ ARTIST > < COUNTRY >EU</ COUNTRY > < COMPANY >BMG</ COMPANY > < PRICE >9.90</ PRICE > < YEAR >1997</ YEAR > </ CD > < CD > < TITLE >One night only</ TITLE > < ARTIST >Bee Gees</ ARTIST > < COUNTRY >UK</ COUNTRY > < COMPANY >Polydor</ COMPANY > < PRICE >10.90</ PRICE > < YEAR >1998</ YEAR > </ CD > < CD > < TITLE >Sylvias Mother</ TITLE > < ARTIST >Dr.Hook</ ARTIST > < COUNTRY >UK</ COUNTRY > < COMPANY >CBS</ COMPANY > < PRICE >8.10</ PRICE > < YEAR >1973</ YEAR > </ CD > < CD > < TITLE >Maggie May</ TITLE > < ARTIST >Rod Stewart</ ARTIST > < COUNTRY >UK</ COUNTRY > < COMPANY >Pickwick</ COMPANY > < PRICE >8.50</ PRICE > < YEAR >1990</ YEAR > </ CD > < CD > < TITLE >Romanza</ TITLE > < ARTIST >Andrea Bocelli</ ARTIST > < COUNTRY >EU</ COUNTRY > < COMPANY >Polydor</ COMPANY > < PRICE >10.80</ PRICE > < YEAR >1996</ YEAR > </ CD > < CD > < TITLE >When a man loves a woman</ TITLE > < ARTIST >Percy Sledge</ ARTIST > < COUNTRY >USA</ COUNTRY > < COMPANY >Atlantic</ COMPANY > < PRICE >8.70</ PRICE > < YEAR >1987</ YEAR > </ CD > < CD > < TITLE >Black angel</ TITLE > < ARTIST >Savage Rose</ ARTIST > < COUNTRY >EU</ COUNTRY > < COMPANY >Mega</ COMPANY > < PRICE >10.90</ PRICE > < YEAR >1995</ YEAR > </ CD > < CD > < TITLE >1999 Grammy Nominees</ TITLE > < ARTIST >Many</ ARTIST > < COUNTRY >USA</ COUNTRY > < COMPANY >Grammy</ COMPANY > < PRICE >10.20</ PRICE > < YEAR >1999</ YEAR > </ CD > < CD > < TITLE >For the good times</ TITLE > < ARTIST >Kenny Rogers</ ARTIST > < COUNTRY >UK</ COUNTRY > < COMPANY >Mucik Master</ COMPANY > < PRICE >8.70</ PRICE > < YEAR >1995</ YEAR > </ CD > < CD > < TITLE >Big Willie style</ TITLE > < ARTIST >Will Smith</ ARTIST > < COUNTRY >USA</ COUNTRY > < COMPANY >Columbia</ COMPANY > < PRICE >9.90</ PRICE > < YEAR >1997</ YEAR > </ CD > < CD > < TITLE >Tupelo Honey</ TITLE > < ARTIST >Van Morrison</ ARTIST > < COUNTRY >UK</ COUNTRY > < COMPANY >Polydor</ COMPANY > < PRICE >8.20</ PRICE > < YEAR >1971</ YEAR > </ CD > < CD > < TITLE >Soulsville</ TITLE > < ARTIST >Jorn Hoel</ ARTIST > < COUNTRY >Norway</ COUNTRY > < COMPANY >WEA</ COMPANY > < PRICE >7.90</ PRICE > < YEAR >1996</ YEAR > </ CD > < CD > < TITLE >The very best of</ TITLE > < ARTIST >Cat Stevens</ ARTIST > < COUNTRY >UK</ COUNTRY > < COMPANY >Island</ COMPANY > < PRICE >8.90</ PRICE > < YEAR >1990</ YEAR > </ CD > < CD > < TITLE >Stop</ TITLE > < ARTIST >Sam Brown</ ARTIST > < COUNTRY >UK</ COUNTRY > < COMPANY >A and M</ COMPANY > < PRICE >8.90</ PRICE > < YEAR >1988</ YEAR > </ CD > < CD > < TITLE >Bridge of Spies</ TITLE > < ARTIST >T'Pau</ ARTIST > < COUNTRY >UK</ COUNTRY > < COMPANY >Siren</ COMPANY > < PRICE >7.90</ PRICE > < YEAR >1987</ YEAR > </ CD > < CD > < TITLE >Private Dancer</ TITLE > < ARTIST >Tina Turner</ ARTIST > < COUNTRY >UK</ COUNTRY > < COMPANY >Capitol</ COMPANY > < PRICE >8.90</ PRICE > < YEAR >1983</ YEAR > </ CD > < CD > < TITLE >Midt om natten</ TITLE > < ARTIST >Kim Larsen</ ARTIST > < COUNTRY >EU</ COUNTRY > < COMPANY >Medley</ COMPANY > < PRICE >7.80</ PRICE > < YEAR >1983</ YEAR > </ CD > < CD > < TITLE >Pavarotti Gala Concert</ TITLE > < ARTIST >Luciano Pavarotti</ ARTIST > < COUNTRY >UK</ COUNTRY > < COMPANY >DECCA</ COMPANY > < PRICE >9.90</ PRICE > < YEAR >1991</ YEAR > </ CD > < CD > < TITLE >The dock of the bay</ TITLE > < ARTIST >Otis Redding</ ARTIST > < COUNTRY >USA</ COUNTRY > < COMPANY >Atlantic</ COMPANY > < PRICE >7.90</ PRICE > < YEAR >1987</ YEAR > </ CD > < CD > < TITLE >Picture book</ TITLE > < ARTIST >Simply Red</ ARTIST > < COUNTRY >EU</ COUNTRY > < COMPANY >Elektra</ COMPANY > < PRICE >7.20</ PRICE > < YEAR >1985</ YEAR > </ CD > < CD > < TITLE >Red</ TITLE > < ARTIST >The Communards</ ARTIST > < COUNTRY >UK</ COUNTRY > < COMPANY >London</ COMPANY > < PRICE >7.80</ PRICE > < YEAR >1987</ YEAR > </ CD > < CD > < TITLE >Unchain my heart</ TITLE > < ARTIST >Joe Cocker</ ARTIST > < COUNTRY >USA</ COUNTRY > < COMPANY >EMI</ COMPANY > < PRICE >8.20</ PRICE > < YEAR >1987</ YEAR > </ CD > </ CATALOG > |
运行针对 XML 文件的查询,并以 HTML 返回结果:
<?php $q = $_GET [ "q" ]; $xmlDoc = new DOMDocument(); $xmlDoc ->load( "cd_catalog.xml" ); $x = $xmlDoc ->getElementsByTagName( 'ARTIST' ); for ( $i =0; $i <= $x ->length-1; $i ++) { // 处理元素节点 if ( $x ->item( $i )->nodeType==1) { if ( $x ->item( $i )->childNodes->item(0)->nodeValue == $q ) { $y =( $x ->item( $i )->parentNode); } } } $cd =( $y ->childNodes); for ( $i =0; $i < $cd ->length; $i ++) { // 处理元素节点 if ( $cd ->item( $i )->nodeType==1) { echo ( "<b>" . $cd ->item( $i )->nodeName . ":</b> " ); echo ( $cd ->item( $i )->childNodes->item(0)->nodeValue); echo ( "<br>" ); } } ?> |
当 CD 查询从 JavaScript 发送到 PHP 页面时,将发生: