Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Java и Ajax - Parsing XML строки от Servleta


Автор: Dzo 4.2.2009, 19:53
Так сначала кусочки кода:

AjaxRequestHandling Servlet:

Код


PrintWriter out = response.getWriter();
                
// create XML with data
returnXML = new StringBuffer("\r\n<video>");
returnXML.append("\r\n<i>"+i+"</i>"); // i is sent to make sure we do not generate the same movie two times in a row
returnXML.append("\r\n<title>"+videoTitles.get(i)+"</title>");
returnXML.append("\r\n<link>"+videoLinks.get(i)+"</link>");
returnXML.append("\r\n<description>"+videoShortDescriptions.get(i)+"</description>");
returnXML.append("\r\n</video>");
                
response.setContentType("text/xml");
response.setHeader("Cache-Control", "no-cache");
System.out.println(returnXML.toString());
out.print(returnXML.toString());



XML файл выдаеццо такой:


Код

<video>
<i>3</i>
<title>Test3</title>
<link>http://www.youtube.com/v/LKutpR9e7JY&hl=en&fs=1</link>
<description>haha</description>
</video>



ajax.js - запощу весь, потому что не уверен что конкретно нужно

Код


var iChecker;
var xmlHttp;

function ajaxFunction() {
    
    try {
        // Firefox, Opera 8.0+, Safari
        xmlHttp=new XMLHttpRequest();
    } catch (e) {      
        // Internet Explorer
        try {
            xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
                    
            try {
                xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {
                alert("Your browser does not support AJAX!");
                return false;
            }
        }
    }
    return xmlHttp;
}
            
function nextVideo() {
                
    var xmlHttp = ajaxFunction();
    
    xmlHttp.open("GET","AjaxRequestsHandling?action=nextvideo",true);
    xmlHttp.onreadystatechange=callback;
    xmlHttp.send(null);            
}

function mineXMLInMS() {

    alert("HEY!");
    var response = xmlHttp.responseText;
    var xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
    xmlDoc.async="false";
    xmlDoc.loadXML(resp);
    
    // start mining
    i = xmlDoc.getElementsByTagName('i');
    iChecker = i[0].firstChild.data;
    
    titleVal = xmlDoc.getElementsByTagName('title');
    var title = document.getElementById('videoTitle');
    title.innerHTML=titleVal[0].firstChild.data;
    
}

function mineXML() {

    var response = xmlHttp.responseText;
    var parser = new DOMParser();
    var dom = parser.parseFromString(response,"text/xml");
    
    // start mining
    titleVal = dom.getElementsByTagName("title");
    var title = document.getElementById('videoTitle');
        [color=green]alert("Я вылажу без проблем!")[/color]
    title.innerHTML=titleVal[0].childNodes[0].nodeValue;
        [color=red]alert("А вот я уже не вылажу")[/color]
}

function callback() {
    if(xmlHttp.readyState == 4) {
        if(xmlHttp.status == 200) {    
            if (window.XMLHttpRequest) {
                mineXML();
            }
            else if (window.ActiveXObject) {
                mineXMLInMS();
            }
        }
    }
}



Первый вопрос:

Если запускать это счастье из Firefox, то алерт отмеченный зеленым цветом в функции mineXML() вылазит без проблем.
Второй же алерт уже не вылазит. То есть проблема в title.innerHTML=titleVal[0].childNodes[0].nodeValue;? Что там не так? : (

Второй вопрос:

Если это все запускать из IE, то даже не отправляется запрос к сервлету и IE выплевывает ошибку:

Строка: 57
Символ: 2
Ошибка: "DomParser" - определение отсутствует
Код: 0

Как лечить?

P.S - было бы хорошо, чтобы во вставках кода можно было отмечать нужно цветом интересующие места.

Автор: AntonSaburov 4.2.2009, 20:07
А не смущает, что это форум по Java, а не JavaScript ?

Автор: Dzo 4.2.2009, 20:35
Нет : )

Но теперь да...

Автор: An6rey 4.2.2009, 22:47
А почему бы не почитать документацию? Тут не то чтобы ошибки, а просто невладение метриалом.
Например:
- парсить XML не нужно есть свойство responseXML типа Document
- в ИЕ7 есть объект window.XMLHttpRquest и ошибка с DOMParser поэтому наверное вылазит
- для текстовых данных лучше использовать всегда firstChild.data - хотя по спецификации вроде бы можно и с  nodeValue, но где-то так не работало (кажется в старой Опере)




Автор: Dzo 5.2.2009, 00:03
Ну проблема в том, что это мои первые проба с AJAXом, и примеры взяты из книжки... Сложно начать что-то копать, когда не знаешь откуда подступиться, если даже примеры из книжки не работают.

Автор: An6rey 5.2.2009, 01:26
Вот более работающий пример

http://www.w3schools.com/Ajax/ajax_responsexml.asp

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)