我是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],修复了你注意到的第一个问题)
答案 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;
}
});
}