IE下无法访问responseXML的原因

本文介绍了一个使用AJAX从外部网站获取EnglishJokesRSS的问题解决过程。作者发现Internet Explorer(IE)浏览器在请求RSS源时,如果服务器未设置正确的text/xml MIME类型,则无法正确解析XML响应。文章提供了实现代码,并详细解释了兼容IE与Firefox等浏览器的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前几天想写一个在自己网页里用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>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值