注册 登录
编程论坛 jQuery论坛

如何解决IE下AJAX读取动态页面的错误?

lonelysea 发布于 2006-05-22 18:31, 2017 次点击
本人今日正在学习使用AJAX技术与ASP的联合使用,我设计了一个ASP的页面用于动态生成一个XML的页面,然后使用AJAX技术读取该页面并进行相关操作。但是在实际使用中我出现了错误,代码在Firefox下执行正常,但是到IE下就报错,说我需要寻找的节点不存在,但是如果将AJAX的数据读取源从动态页改为静态的XML文件,程序执行又正常了,不知道是什么原因,难道是IE下的“Microsoft.XMLHTTP”和“Msxml2.XMLHTTP”不支持动态页面读取吗?还望斑竹和高手帮助解答,谢谢!
4 回复
#2
lonelysea2006-05-23 19:14
请斑竹帮忙!
#3
lonelysea2006-05-23 19:44
再请斑竹帮忙!
#4
lonelysea2006-05-25 09:57
#5
lonelysea2006-05-25 10:02

因为我的表述不清造成了一些误解,下面我就将具体的问题联合案例文件一起发布出来,忘大家帮助解决。
我的展示文件包括三个:

AJAX.html——需要读取XML数据的页面,也是唯一使用了AJAX技术的页面

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>Js_Test_1.html</title>
<script language="java-script1.5" type="text/java-script">
<!--
function AJAX(){
var AJAXObj = null;
if (window.XMLHttpRequest){
AJAXObj = new XMLHttpRequest();
if (AJAXObj.overrideMimeType){
AJAXObj.overrideMimeType("text/xml");
}
}else if (window.ActiveXObject){
try{
AJAXObj = new ActiveXObject("Msxml2.XMLHTTP.5.0");
}catch (e){
try{
AJAXObj = new ActiveXObject("Msxml2.XMLHTTP.4.0");
}catch (e){
try{
AJAXObj = new ActiveXObject("Msxml2.XMLHTTP.3.0");
}catch (e){
try{
AJAXObj = new ActiveXObject("Msxml2.XMLHTTP");
}catch (e){
try{
AJAXObj = new ActiveXObject("Microsoft.XMLHTTP");
}catch (e){}
}
}
}
}
}
if (!AJAXObj) {
window.alert("不能创建 XMLHttpRequest 对象实例.");
return false;
}
this.UserFunction = function (UserFunctionName){
if (!UserFunctionName || UserFunctionName == null){
alert("AJAX erro:\nUserFunctionName's value is null or false value.");
return false;
}
AJAXObj.onreadystatechange = function (){
if (AJAXObj.readyState == 4){
if(AJAXObj.status == 200){
eval(UserFunctionName);
}else{
alert("您所请求的页面有异常。");
}
}
}
}
this.Value = function (){
return AJAXObj;
}
this.Send = function(Url,SendType,SendInfor){
if (!Url || Url == null){
alert("AJAX erro:\nUrl's value is null or false value.");
return false;
}
if (!SendType || SendType == null || SendType !== "POST" || SendType !== "HEAD"){
SendType = "GET";
}
if (!SendInfor || SendInfor == null){
SendInfor = null;
}
AJAXObj.open(SendType,Url,true);
if (SendInfor !== null){
AJAXObj.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
}
AJAXObj.send(SendInfor);
}
this.Clean = function (){
AJAXObj = null;
}
}
//-->
</script>
</head>

<body>
<script language="java-script1.5" type="text/java-script">
<!--
function Result(){
var XMLObj = AJAXTest.Value();
alert("XMLObj = " + XMLObj.responseText);
//读取属性值
//var NodeName = "DefaultLanguage";
//var XMLInfor = XMLObj.responseXML.getElementsByTagName(NodeName)[0].getAttribute("xml:lang");
//读取节点值
var NodeName = "AJAXTestInfor";
var XMLInfor = XMLObj.responseXML.getElementsByTagName(NodeName)[0].firstChild.nodeValue;
alert(NodeName + " = " + XMLInfor);
}

var AJAXTest = new AJAX();
AJAXTest.UserFunction("Result();");
AJAXTest.Send("XML.asp","POST",null);
//AJAXTest.Send("XML.xml","POST",null);
//-->
</script>
</body>
</html>

XML.asp——由ASP生成的动态XML数据源

<%@LANGUAGE="vb-script" CODEPAGE="936"%>
<%
Response.Buffer = True
Response.Expires = 0
%>
<?xml version="1.0" encoding="UTF-8"?>
<Languages>
<DefaultLanguage xml:lang="scn" />
<Language xml:lang="en" EngName="English" LangName="English" Charset="Windows-1252" IsUse="False">
<AJAXTestInfor>Are you sure quit?</AJAXTestInfor>
</Language>
<Language xml:lang="scn" EngName="SimpleChinese" LangName="SimpleChinese" Charset="Windows-1252" IsUse="True">
<AJAXTestInfor>您确定要退出系统管理面板吗?</AJAXTestInfor>
</Language>
<Language xml:lang="tcn" EngName="TraditionalChinese" LangName="TraditionalChinese" Charset="Windows-1252" IsUse="False">
<AJAXTestInfor>您確定要退出系統管理面板嗎?</AJAXTestInfor>
</Language>
</Languages>

XML.xml——静态的XML数据源

<?xml version="1.0" encoding="UTF-8"?>
<Languages>
<DefaultLanguage xml:lang="scn" />
<Language xml:lang="en" EngName="English" LangName="English" Charset="Windows-1252" IsUse="False">
<AJAXTestInfor>Are you sure quit?</AJAXTestInfor>
</Language>
<Language xml:lang="scn" EngName="SimpleChinese" LangName="SimpleChinese" Charset="Windows-1252" IsUse="True">
<AJAXTestInfor>您确定要退出系统管理面板吗?</AJAXTestInfor>
</Language>
<Language xml:lang="tcn" EngName="TraditionalChinese" LangName="TraditionalChinese" Charset="Windows-1252" IsUse="False">
<AJAXTestInfor>您確定要退出系統管理面板嗎?</AJAXTestInfor>
</Language>
</Languages>

以上就是全部的三个范例文件。
测试的时候,如果使用XML.xml文件作为数据源则可以正确的执行,但是如果使用XML.asp作为数据源,则在Firefox下可以正确执行,但在IE下则会报错,错误信息如下:

只有本站会员才能查看附件,请 登录

不知道为何原因,请高手、斑竹帮助,谢谢!

1