Ошибка Ajax "undefined" в IE - PullRequest
       15

Ошибка Ajax "undefined" в IE

1 голос
/ 23 сентября 2010

Я довольно новичок в 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 на сервере, я получаю слово «неопределенный» в Div textBox вместо содержимого, извлеченного из документа XML.Как мне решить эту проблему?

Заранее спасибо <> <</p>


Спасибо Бобинсу, но это тоже не сработает.

Это интересная заметкао текстовом содержании.Я попытался:

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, но я все равно получаю "undefined" в IE.

Кроме того, еслиЯ просто использую innerText и забываю о совместимости с FF, я получаю "undefined" в каждом браузере, а не только в IE.

Не уверен, как это исправить ...

Вот живой сайт, если этоhelp: www.tcmulder.com / art

(О, и обратите внимание, я использую (curPage) [curStage], исправляет первую проблему, которую вы заметили)

Ответы [ 3 ]

0 голосов
/ 25 сентября 2010

Переключите исходное условие, чтобы сначала проверить наличие конкретного объекта 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);   
}  
0 голосов
/ 25 сентября 2010

Спасибо за вашу помощь; У меня не хватило времени на этом сайте, поэтому мне все-таки пришлось использовать 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;
    }
    });
}
0 голосов
/ 23 сентября 2010
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.

...