没有方法'getElementsByTagName'错误没有意义

时间:2011-08-16 07:44:34

标签: javascript xml ajax

我警告(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"); 

并声明:

  

未捕获的TypeError:对象<?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 个答案:

答案 0 :(得分:1)

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文档构建器。

答案 1 :(得分:0)

responseText(xmldoc)是一个字符串。字符串有方法,但getElementByTagName不是其中之一。

getElementByTagName是一个对象的方法,而不是字符串。例如

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

请提供您正在尝试做的更多信息。

答案 2 :(得分:0)

在PHP中发送响应之前,您尚未发送正确的响应标头...这就是responseXML为空的原因。

尝试添加PHP文件: -

标题('Content-Type:text / xml');