как обрабатывать вызов метода getElementsByTagname имеет значение null - PullRequest
0 голосов
/ 10 августа 2011

У меня есть этот кусок кода 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>';

Может кто-нибудь помочь здесь, пожалуйста? не понимаю, как это работает
спасибо

Ответы [ 3 ]

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

Просто выстрел в темноте здесь, но попробуйте это:

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
      } 
   }
}
0 голосов
/ 17 августа 2011

После просмотра кода, который вы разместили, на ум приходят эти проблемы ...

  1. На самом деле вы не добавили echo $xml; для вывода сгенерированного XML.
  2. Дажепосле добавления оператора 'echo' вы можете получить null responseXML (и, следовательно, неопределенное getElementsByTagName) из-за некоторых ошибок в вашем PHP-коде (возможно, SQL-запрос).
  3. Даже если вашPHP-код верен, вы получите null responseXML, потому что вы не отправили правильный заголовок содержимого (header('Content-Type: text/xml');).
0 голосов
/ 10 августа 2011

Возможно глупый вопрос, но вы действительно echo ing $xml в своем файле getChat_xml.php?Я вижу, что xmldoc.getElementsByTagName("message") возвращает null, потому что не может найти никаких элементов <message>, потому что DOM никогда не выводился PHP.Что происходит, когда вы просматриваете файл напрямую?: http://www.yoursite.com/getChat_xml.php?chat=1&last=xxx

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