2013-09-23 28 views
0

我在「構建響應式Web應用程序AJAX和PHP」書中遇到了PHP/AJAX聊天教程,並且遇到以下錯誤:TypeError:無法讀取null PHP/AJAX聊天的屬性'documentElement'

TypeError: Cannot read property 'documentElement' of null 

我確信它是指的這個代碼在JavaScript文件:

function readMessages(){ 
    var response = XmlHttpGetMessage.responseText; 

    if(response.indexOf("ERRNO") >= 0 || response.indexOf("error:")>= 0 || response.length==0){ 
     throw(response.length == 0 ? "Void server response." : response); 
    } 

    response = XmlHttpGetMessage.responseXML.documentElement; 

    clearChat = response.getElementByTagName("clear").item(0).firstChild.data; 

    if(clearChat == "true"){ 
     $("#scroll").html(""); 
     lastMessageID = -1; 
    } 

    idArray = response.getElementByTagName("id"); 
    //nameArray = response.getElementByTagName("name"); 
    timeArray = response.getElementByTagName("time"); 
    messageArray = response.getElementByTagName("message"); 

    displayMessages(idArray, nameArray, timeArray, messageArray); 

    if(idArray.length>0){ 
     lastMessageID = idArray.item(idArray.length - 1).firstChile.data; 
     setTimeout("requestNewMessages();", updateInterval); 
    } 
} 

這是Ajax請求我送:

if(cache.length>0){ 
    params = cache.shift(); 
}else{ 
    params="mode=RetrieveNew" + 
      "$id=" +lastMessageID; 
} 

XmlHttpGetMessage.open("POST", chatURL, true); 
XmlHttpGetMessage.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
XmlHttpGetMessage.onreadystatechange = handleRecievingMessages; 
XmlHttpGetMessage.send(params); 

這裏是PHP文件:

<?php 
require_once('init.php'); 


$mode = $_POST['mode']; 
id=0; 
$chat = new Chat(); 
if($mode=='SendAndRetrieveNew'){ 
    $user_id = $_POST['user_id']; 
    $message = $_POST['message']; 
    $color = $_POST['color']; 
    $id = $_POST['id']; 

    if($user_id != '' && $message != '' && $color != ''){ 
     $chat->postNewMessage($user_id, $message, $color); 
    } 
}elseif($mode=='DeleteAndRetrieveNew'){ 
    $chat->deleteAllMessages(); 
}elseif($mode=='RetrieveNew'){ 
    $id = $_POST['id']; 
} 

if(ob_get_length()){ob_clean();} 

header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); 
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . 'GMT'); 
header('Cache-Control: no-cache, must-revalidate'); 
header('Pragma: no-cache'); 
header('Content-Type: text/xml'); 

echo $chat->getNewMessages($id); 
?> 

這裏是手柄接收信息功能 功能handleRecievingMessages(){

if(XmlHttpGetMessage.readyState == 4){ 
     if(XmlHttpGetMessage.status == 200){ 
       try{ 

        readMessages(); 
       }catch(e){ 
        displayError(e.toString()); 
       } 
      }else{ 
       displayError(XmlHttpGetMessage.statusText); 
      } 
     } 
    } 

最後我getNewMessages功能

public function getNewMessages($id=0){ 
      $queryArray = array($id); 
      if($id>0){ 
     //only get the new messages 
     $query = 
     ' SELECT message_id, user_id, message, DATE_FORMAT(posted_on, "%H:%i:%s") 
     AS posted_on FROM chat WHERE message_id > ' 
     . $id . 
     ' ORDER BY message_id ASC'; 
     }else{ 
     //on the first load only retrieve the last 50 messages from server 
     $query = 
     ' SELECT message_id, user_id, message, posted_on 
     FROM (SELECT message_id, user_id, message,s DATE_FORMAT(posted_on, "%H:%i:%s") 
     AS posted_on FROM chat ORDER BY message_id DESC LIMIT 50) AS Last50 
     ORDER BY message_id ASC'; 
     } 

      $query = $this->_database->_link->prepare($queryString); 
      $query->execute(); 

      $response = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'; 
     $response .= '<response>'; 
     $response .= $this->isTableCleared($id); // output the clear flag 

     // if we have any results, loop through all the fetched messages to build the result message 
     if($query->rowCount()){ //get number of rows in a result, aka check for results 
     while ($row = $query->fetch(PDO::FETCH_ASSOC)){ //get results as an associative array 
     $id = $row['message_id']; 
     $userName = $row['user_id']; 
     $time = $row['posted_on']; 
     $message = $row['message']; 
     $response .= '<id>' . $id . '</id>' . 
        '<color>' . $color . '</color>' . 
        '<time>' . $time . '</time>' . 
        '<name>' . $userName . '</name>' . 
        '<message>' . $message . '</message>'; 
     } 

     $query->close(); // close the database connection 
    } 
    $response .= '</response>'; 
    return $response; 
     } 

當我用螢火蟲調試我收到以下文字迴應:

"<br /> <b>Parse error</b>: syntax error, unexpected ';', expecting T_FUNCTION in `<b>C:\xampp\htdocs\thinkaztech\includes\chat.class.php</b> on line <b>93</b><br /> "` 

不過我沒有93行?

我不知道是什麼錯誤,我連接到數據庫就好了,我的chat.class.php文件似乎是正確調用。感謝您提前提供任何有用的建議!

+0

它看起來像一個XML文檔。使用javascript調試工具檢查響應。 –

+0

好了,所以我通過錯誤的整個列表去和固定他們現在的responseXML爲null – Josh

回答

1

看起來像一個錯字:不返回

params="mode=RetrieveNew" + 
     "$id=" +lastMessageID; 
     ^should be a & not a $ 
+0

謝謝,還是有問題,雖然 – Josh

+0

可以包含的代碼段,你用'響應= XmlHttpGetMessage.responseXML.documentElement;'?這似乎是相關的,是嗎? –

+0

當然,我編輯的行,所以它現在包括整個功能代碼 – Josh

相關問題