前几天想写一个在自己网页里用AJAX读取别的网站的English Jokes RSS的功能. 自己按部就班地写了以下程序, 在FF里表现正常, 可是在IE里死活都取不到responseXML里面的节点值. 后来在网上找了大半天才弄明白, 原来要求服务端返回的类型必须是 "text/xml", 否则IE就无法解析responseXML.
附源码如下:
<html>
<head>
<title>Jokes</title>
<script language="javascript">
var httpRequest = false;
function createHttpRequest(){
httpRequest = false;
//begin to inialize XMLHttpRequest
if(window.XMLHttpRequest) { //Mozilla
httpRequest = new XMLHttpRequest();
if (httpRequest.overrideMimeType) {//set MiME type
httpRequest.overrideMimeType('text/xml');
}
}
else if (window.ActiveXObject) { // IE
try {
httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
return httpRequest;
}
function listJokes(){
httpRequest = createHttpRequest();
if (!httpRequest) { // exception, failed to create instance
window.alert("Can not create object XMLHttpRequest.");
return false;
}else{
var url = "test.jsp";
httpRequest.onreadystatechange = callBack;
// set the send method and URL
httpRequest.open("GET", url, false);
httpRequest.send(null);
}
}
function callBack(){
if (httpRequest.readyState == 4) {
if (httpRequest.status == 200) {
var xmlobj = httpRequest.responseXML;
var item = xmlobj.getElementsByTagName("item")[0];
var title = item.getElementsByTagName("title")[0].firstChild.data;
var description = item.getElementsByTagName("description")[0].firstChild.data;
var link = item.getElementsByTagName("link")[0].firstChild.data;
var codes = "";
codes += "<a href='"+link+"'><h3>" + title + "</h3></a>";
codes += "<p>" + description + "</p>";
document.getElementById("jokesDiv").innerHTML=codes;
}
}
}
</script>
</head>
<body onload="listJokes()">
RSS源: http://www.arcamax.com/jokes/channelfeed
<div id="jokesDiv"></div>
</body>
</html>