我警告(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'
有人可以解释一下吗? 谢谢
答案 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');