IE中的Ajax错误“未定义”

时间:2010-09-23 17:34:17

标签: ajax internet-explorer undefined

我是Ajax的新手。我正在尝试将XML文件的某些特定部分放入我的页面上的div中,以下内容适用于除IE之外的每个最新浏览器:

var xhr = false;  
//Executed to request content from the server  
function setContent(){  
    if(window.XMLHttpRequest){  
        xhr = new XMLHttpRequest();  
    } else {  
        if(window.ActiveXObject){  
            xhr = new ActiveXObject("Microsoft.XMLHTTP");  
        }  
    }  
    xhr.onreadystatechange = showContent;  
    xhr.open("GET", "ajax/art.xml", true);  
    xhr.send(null);  
}  
//Executed to set the appropriate text once the server has gathered the data  
function showContent(){  
    if(xhr.readyState == 4){  
        if(xhr.status == 200 || window.location.href.indexOf("http") == -1){  
            var newData = xhr.responseXML.getElementsByTagName(curPage).textContent;  
        }  
        var textBox = document.getElementById("textBox");  
        textBox.innerHTML = newData;  
    }  
}  

(curPage的值在代码中的其他地方设置并且似乎具有正确的值) 当我在服务器上的IE中执行此代码时,我在textBox Div中获得单词“undefined”,而不是从XML文档中获取的内容。我该如何解决这个问题?

提前致谢<><


谢谢bobince,但这似乎也不起作用。

这是关于textContent的一个有趣的说明。我试过了:

if(xhr.responseXML.getElementsByTagName(allPages[curPage])[curStage].textContent != undefined){
    var newText = xhr.responseXML.getElementsByTagName(curPage)[curStage].textContent;
} else {
    var newText = xhr.responseXML.getElementsByTagName(curPage)[curStage].innerText
    }
}

因为innerText应该在除FF之外的每个浏览器中工作,textContent应该在除IE之外的每个浏览器中工作,但我仍然在IE中得到“未定义”。

此外,如果我只使用innerText并忘记FF兼容性,我会在每个浏览器中获得“undefined”,而不仅仅是IE。

不确定如何解决这个问题......

如果有帮助,这是现场网站: www.tcmulder.com/art

(哦,注意我正在使用(curPage)[curStage],修复了你注意到的第一个问题)

3 个答案:

答案 0 :(得分:0)

getElementsByTagName(curPage).textContent

不适用于任何浏览器。 getElementsByTagName返回元素列表,而不是单个元素。 NodeList没有textContent属性。

无论如何,IE不支持DOM Level 3 Core属性textContent。如果您确定元素中只有一个文本节点,则可以使用以下内容读取其内容:

var el= xhr.responseXML.getElementsByTagName(curPage)[0];
var text= el.firstChild.data;

如果元素可能为空,则可以检查(el.firstChild!==null);如果有混合文本和元素内容,则需要编写模拟textContent的文本提取器函数。

答案 1 :(得分:0)

切换初始条件以首先检查MS特定对象,然后检查XMLHTTPRequest。

IE的更高版本“支持”XMLHttpRequest,但它不起作用。如果你切换条件,你的代码应该可以工作。

function setContent(){   
    if(window.ActiveXObject){   
        xhr = new ActiveXObject("Microsoft.XMLHTTP");   
    } else {   
        if(window.XMLHttpRequest){   
            xhr = new XMLHttpRequest(); 
        }   
    }   
    xhr.onreadystatechange = showContent;   
    xhr.open("GET", "ajax/art.xml", true);   
    xhr.send(null);   
}  

答案 2 :(得分:0)

感谢您的帮助;我在这个网站上已经没时间了,所以毕竟我不得不使用jQuery。

function setContent(){   
$.ajax({
    type: "GET",
    url: "ajax/art.xml",
    dataType: "xml",
    success: function(xml){
        var curData = curPage + ":eq(" + [curStage] + ")";
        var theText = $(xml).find(curData).text();
        $("#textBox span").replaceWith("<span>" + theText + "</span>");
        ajaxReady = true;
    }
    });
}