не имеет метода 'getElementsByTagName' ошибка не имеет смысла - PullRequest
1 голос
/ 16 августа 2011

я оповещения (xmldoc) в нем есть? я не понимаю вот код:

function getChatText()
{
   if (receiveReq.readyState == 4 || receiveReq.readyState == 0) 
   {
      receiveReq.open("GET", 'getChat.php', true);
      receiveReq.onreadystatechange = handleReceiveChat; 
      receiveReq.send(null);
   }
}   

function handleReceiveChat()
{
   if (receiveReq.readyState == 4)
   {
      var chat_div = document.getElementById('div_chat');
      var xmldoc = receiveReq.responseText;
      alert(xmldoc);
      var message_nodes = xmldoc.getElementsByTagName("message"); 
      var n_messages = message_nodes.length
      //more code here
   }
}

часть getChat.php выглядит так:

<?php
//code here
  $xml = '<?xml version="1.0" ?>';
  $sql = "SELECT message_id, user_name, message, date_format(post_time, '%h:%i') as post_time" . 
    " FROM message WHERE chat_id = " . db_input($_GET['chat']) ;
  $message_query = db_query($sql);
  while($message_array = db_fetch_array($message_query)) 
  {
$xml .= '<message>';
    $xml .= '<message_id id= "' . $message_array['message_id'] . '"</message_id>';
$xml .= '<user>' . htmlspecialchars($message_array['user_name']) . '</user>';
$xml .= '<text>' . htmlspecialchars($message_array['message']) . '</text>';
$xml .= '<time>' . $message_array['post_time'] . '</time>';
$xml .= '</message>';
  }
}
echo $xml;
?>

точная ошибка включена:

var message_nodes = xmldoc.getElementsByTagName("message"); 

и состояния:

Uncaught TypeError: Object <?xml version="1.0" ?><message><message_id id= "1"</message_id><user>Me, ME, me and mE </user><text>123</text><time>09:14</time></message> не имеет метода 'getElementsByTagName'

Может кто-нибудь объяснить это? спасибо

Ответы [ 3 ]

1 голос
/ 16 августа 2011

xmldoc представляется строкой (receiveReq.responseText), а не элементом DOM. У строк нет метода getElementsByTagName.

Попробуйте receiveReq.responseXML [spec] , это возвращает объект DOM Document.

См. Также: XMLHttpRequest [MDN]

Обновление: Я взял XML, как показано в вашем посте, и пробежал по нему http://validator.w3.org/check.

Ваш XML не верен, поэтому вы получаете null. Это недействительно:

<message_id id= "1"</message_id>

Кажется, вам не хватает >. Если вы генерируете этот XML вручную, то не надо. Используйте правильный конструктор документов XML.

0 голосов
/ 16 августа 2011

Вы не отправили правильные заголовки ответа перед отправкой ответа в PHP ... Вот почему responseXML имеет значение null.

Попробуйте добавить в ваш файл PHP: -

заголовок ('Content-Type: text / xml');

0 голосов
/ 16 августа 2011

responseText (xmldoc) является строкой. У строк есть методы, но getElementByTagName не является одним из них.

getElementByTagName - это метод объектов, а не строк. например,

var numberOfAnchorTagsInADocument = document.getElementByTagName("a").length;

Пожалуйста, предоставьте больше информации о том, что вы пытаетесь сделать.

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