【问题标题】:how to handle call to method getElementsByTagname is null如何处理对方法 getElementsByTagname 的调用为空
【发布时间】:2011-08-17 05:21:21
【问题描述】:

我有这段 js 代码:

<script language="JavaScript" type="text/javascript">
    var sendReq = getXmlHttpRequestObject();
    var receiveReq = getXmlHttpRequestObject();
    var lastMessage = 0;
    var mTimer;
    function handleReceiveChat() 
    {
       if (receiveReq.readyState == 4)
       {
          var chat_div = document.getElementById('div_chat');    
          var xmldoc = receiveReq.responseXML;     
          var message_nodes = xmldoc.getElementsByTagName("message");
          //more code
       }
    }


    function getChatText()
    {
        if (receiveReq.readyState == 4 || receiveReq.readyState == 0) 
        {
           receiveReq.open("GET", 'getChat_xml.php?chat=1&last=' + lastMessage, true);
           receiveReq.onreadystatechange = handleReceiveChat; 
           receiveReq.send(null);
        }
    }
</script>

在 getChat_xml 我有这个:

$xml = '<?xml version="1.0" ?><root>';
if(!isset($_GET['chat'])) 
{
$xml .='Your are not currently in a chat session.  <a href="">Enter a chat session here</a>';
$xml .= '<message id="0">';
$xml .= '<user>Admin</user>';
$xml .= '<text>Your are not currently in a chat session.  &lt;a href=""&gt;Enter a chat session here&lt;/a&gt;</text>';
$xml .= '<time>' . date('h:i') . '</time>';
$xml .= '</message>';
}
else
{
$last = (isset($_GET['last']) && $_GET['last'] != '') ? $_GET['last'] : 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']) . " AND message_id > " . $last;
$message_query = db_query($sql);
//Loop through each message and create an XML message node for each.
while($message_array = db_fetch_array($message_query))
    {
    $xml .= '<message id="' . $message_array['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>';
}
}
$xml .= '</root>';

有人可以帮忙吗?不明白这是如何工作的
谢谢

【问题讨论】:

  • 您从未说明实际问题是什么,因为它与您发布的代码有关。
  • 我正在尝试让本教程在我的开发箱上运行。dynamicajax.com/fr/AJAX_Driven_Web_Chat-271_290_291.html 并遇到与 message_nodes = xmldoc.getElementsByTagName("message"); 一致的错误。无法调用 null 的 getElementsByTagName 方法???

标签: html xml ajax


【解决方案1】:

看了你贴出来的代码,想到这些问题……

  1. 您实际上并未添加echo $xml; 来输出生成的XML。
  2. 即使在添加“echo”语句后,由于 PHP 代码(可能是 SQL 查询)中的一些错误,您可能会得到 nullresponseXML(因此是未定义的 getElementsByTagName)。
  3. 即使你的 PHP 代码是正确的,你也会得到 null responseXML 因为你没有发送正确的内容头 (header('Content-Type: text/xml');)。

【讨论】:

    【解决方案2】:

    也许是一个愚蠢的问题,但您实际上是在您的getChat_xml.php 文件中echoing $xml 吗?我可以看到xmldoc.getElementsByTagName("message") 返回null,因为它找不到任何&lt;message&gt; 元素,因为PHP 从未输出过DOM。当您直接查看文件时会发生什么? :http://www.yoursite.com/getChat_xml.php?chat=1&last=xxx

    【讨论】:

    • 哎呀我得到一个服务器错误...我不知道这是如何工作的..我正在完成一个教程并正在开发盒上对其进行测试,试图邮寄作者但电子邮件地址确实不再存在..教程在:dynamicajax.com/fr/AJAX_Driven_Web_Chat-271_290_291.html 请帮忙?谢谢
    • 网站在检索localhost/getChat_xml.php?chat=1&last=0 时遇到错误。它可能因维护而停机或配置不正确。 http错误500...
    • 1.我在结束 标记之后回显 $xml 2. xmldoc.getElementsByTagName("message") 假设指的是什么? xml 文档中的消息标签???它没有找到它??谢谢
    【解决方案3】:

    这里只是在黑暗中拍摄,但试试这个:

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

    【讨论】:

    • 我在 var message_nodes = xmldoc.getElementsByTagName("message");问题是它没有找到getElementsByTagName“消息”我有一段xml代码,它在另一个.php文件中定义,错误说不能调用null的getElementsByTagName方法?请问这部分怎么修?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-25
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多