php使用ajax来读取xml文件。该功能设计到四个文件:html页面,js页面,php页面、xml文件。
一、现实的功能
在html中,通过选择改变select元素,来读取xml文件中相应的内容,如下图:
二、html页面,cdxml.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Page Title</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<p>
<span>Select a CD:</span>
<select name="cds" id="cds">
<option value="Bob Dylan">Bob Dylan</option>
<option value="Bee Gees">Bee Gees</option>
<option value="Cat Stevens">Cat Stevens</option>
</select>
</p>
<p>
<div: id="txtHint"><b>CD info will be listed here.</b></div:>
</p>
<script src="cdxml.js"></script>
</body>
</html>
二、js页面,cdxml.js
(function(){
var cds = document.getElementById("cds")
cds.removeEventListener("change",function(){
showCD(cds.value);
});
cds.addEventListener("change",function(){
showCD(cds.value);
});
var xmlHttp;
function showCD(str){
xmlHttp = GetXmlHttpRequestObject();
if(xmlHttp === null){
console.log("Browser does not support Http request.");
return;
}
xmlHttp.onreadystatechange = stateChanged;
var url = generateUrl("cdxml.php",str);
xmlHttp.open("GET",url,true);
xmlHttp.send(null);
}
// ajax 请求成功,进行的操作
function stateChanged(){
if(xmlHttp.readyState==4 || xmlHttp.readyState == "complete"){
var txtHint = document.getElementById("txtHint")
txtHint.innerHTML = xmlHttp.responseText;
}
}
// 拼接url,拼接一个随机数,防止使用缓存
function generateUrl(php_path,str){
var url = php_path+"?q="+str;
url += "&sid="+Math.random();
return url;
}
// 获取xmlRequestObject
function GetXmlHttpRequestObject(){
var xmlHttp=null;
try{
// Fire,Opera 8+, Safari
xmlHttp = new XMLHttpRequest();
}catch(e){
// Internet Explorer
try{
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}
})();
三、php页面,cdxml.php
<?php
$q = $_GET["q"];
// 加载xml文件
$xmlDoc = new DOMDocument();
$xmlDoc->load("cdxml.xml");
$x = $xmlDoc->getElementsByTagName("ARTIST");
for($i=0;$i<$x->length;$i++){
// 判断是否为 节点,使用 nodetype = 1 ,ELEMENT_NODE
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 $cd->item($i)->nodeName;
echo " : ";
echo $cd ->item($i)->childNodes->item(0)->nodeValue;
echo "<br>";
}
}
?>
四、xml文件
https://github.com/hefrankeleyn/learning-area/blob/master/003PHP/php-ajax/cdxml.xml