Javascript - XMLHttpRequest, результат всегда неопределен - PullRequest
3 голосов
/ 05 февраля 2012

Я пытаюсь проверить, есть ли в xml-файле тег "<group>"

var xmlhttp = new window.XMLHttpRequest();
xmlhttp.open("GET", "xmlfile.xml", false);
xmlhttp.send(null);
xml = xmlhttp.responseXML.documentElement; 

var thegroup = xml.getElementsByTagName('group')[0];
if (!group) {
    alert('No <group> in the XML: ' + xml);
    return;
} else {
    alert(xml + 'have a <group> tag');
}

Даже если в моем xml-файле есть тег "<group>", результат всегда отрицательный, ипеременная "thegroup" не определена.

"xml" дай мне "[элемент объекта]"

Где моя ошибка?

PS: I 'Меня интересует только webkit, сейчас меня не волнуют IE, Opera или Firefox.

РЕДАКТИРОВАТЬ: ЗДЕСЬ МОЙ АКТУАЛЬНЫЙ КОД

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<meta http-equiv="CONTENT-TYPE" content="text/html; charset=UTF-8">
<title>xmltest</title>
<script type="text/javascript">

function init() {

var xmlhttp = new window.XMLHttpRequest();
xmlhttp.open("GET", "xmlfile.xml");
xmlhttp.send(null);
xmlhttp.onreadystatechange = callbackFunction;

function callbackFunction(){
  if (xmlhttp.readyState == 4){
     xml = xmlhttp.responseXML.documentElement; 
    var group = xml.getElementsByTagName('group')[0];
    console.debug(xml)
    if (!group) {
      alert('No <group> in the XML: ' + xml);
      return;
    } else {
      alert(xml + 'have a <group> tag');
    }
  }
}

};

</script>
</head>
<body onLoad="init();">

</body>
</html>

и мой xmlfile.xml:

<?xml version="1.0" ?>

<group type="vertical">
<name>name</name>
<title>title</title>
</group>

В этот момент срабатывает предупреждение, говорящее: нет <group> в XML: [элемент объекта]

Так что, возможно, моя проблема только в том, как я пытаюсь найти <group> tag?

Ответы [ 2 ]

7 голосов
/ 05 февраля 2012

XMLHttpRequest является асинхронным, он не работает таким образом.Когда вы используете xmlhttp.send(null);, вы должны определить функцию обратного вызова, которая будет выполняться, когда сервер ответит данными, в противном случае вы пытаетесь получить доступ к пустым данным.Код будет выглядеть примерно так:

var xmlhttp = new window.XMLHttpRequest();
xmlhttp.open("GET", "xmlfile.xml");
xmlhttp.send(null);
xmlhttp.onreadystatechange = callbackFunction;



function callbackFunction(){
  if (xmlhttp.readyState == 4){
     xml = xmlhttp.responseXML.documentElement; 
    var thegroup = xml.getElementsByTagName('group')[0];
    if (!group) {
      alert('No <group> in the XML: ' + xml);
      return;
    } else {
      alert(xml + 'have a <group> tag');
    }
  }
}

таким образом, вы используете onReadyStateChange, чтобы указать браузеру запускать callbackFunction каждый раз, когда сервер отправляет ответ.Он проверяет, что readyState равно 4, что означает, что запрос был полностью обработан.

1 голос
/ 05 февраля 2012
var thegroup = xml.getElementsByTagName('group')[0];
if (!group) {
    alert('No <group> in the XML: ' + xml);
    return;
} else {
    alert(xml + 'have a <group> tag');
}

Что такое group? Вы имели в виду thegroup?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...