2011-03-29 23 views
0

我是一個PHP傢伙,並且對JavaScript非常新穎。我正在嘗試爲我正在構建的網站添加一個簡單的AJAX聊天程序。問題是,我不知道如何測試我的請求是否已發送,或者如果它是PHP背後的問題。如果是我可以修復的PHP,如果它是JavaScript,那麼這就是這個問題的用意。我沒有收到任何錯誤,但我也沒有收到我的數據庫中的任何聊天消息。這裏是我的聊天頁面上的javascript:Javascript - 不確定我的AJAX是否正確,沒有錯誤,但沒有數據庫條目

<script type="text/javascript"> 
var xmlhttp; 
var newChatMessage; 
window.onunload=function() { 
    if (window.XMLHttpRequest) { 
     xmlhttp=new XMLHttpRequest(); 
     } 
    else { 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
    xmlhttp.open("POST","tinChat_process.php",true); 
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
    xmlhttp.send("action=pageClose"); 
}; 
function loadChat() { 
    if (window.XMLHttpRequest) { 
     xmlhttp=new XMLHttpRequest(); 
     } 
    else { 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
    xmlhttp.open("POST","tinChat_process.php",true); 
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
    xmlhttp.send("action=grabChat"); 
    xmlhttp.onreadystatechange=function() { 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
      document.getElementById("ajaxBox").innerHTML=xmlhttp.responseText; 
      } 
     } 
    t=setTimeout("loadChat()",5000); 
    } 
function sendMessage() { 
    newChatMessage = "action=newMessage&message=" + document.getElementByID("chatMess").value; 
    if (window.XMLHttpRequest) { 
     xmlhttp=new XMLHttpRequest(); 
     } 
    else { 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
    xmlhttp.open("POST","tinChat_process.php",true); 
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
    xmlhttp.send(newChatMessage); 
    xmlhttp.onreadystatechange=function() { 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
      document.getElementById("ajaxBox").innerHTML=xmlhttp.responseText; 
      } 
     } 
    } 
loadChat(); 
</script> 

我敢肯定有更好的方法來寫代碼,但任何人都可以看到它的任何錯誤?我通常的PHP調試方法不起作用,因爲它們包含半分割的問題區域,包含die消息或vadumping期望值等 - 所有這些在頁面加載後都不會真正顯示,是正確的?所以這讓我無法在PHP或JavaScript之間進行一半的分割。無論如何,謝謝你的幫助。

+1

通過在jQuery上進行1小時的速成課程來幫助自己。它可以節省你的工作時間。 http://docs.jquery.com/Tutorials – 2011-03-29 03:44:37

回答

2

一個重要的調試工具是Firebug,它是Firefox的一個插件。

您不僅可以使用它來檢查您的HTML,還可以觀察您的XMLHTTP請求發生了什麼。

安裝完成後,在右下角會看到螢火蟲圖標。打開它啓用所有內容並選擇NET選項卡。你可以從那裏開始撥動。

+0

我會檢查出來的,謝謝。 – linus72982 2011-03-29 03:45:52

+0

好吧,我安裝了螢火蟲,並得到一個getElementByID(「ajaxBox」)爲空,所以我想我太早啓動腳本,在加載ajaxBox div之前,所以我只是將調用loadChat移動到onload ajaxBox div - 現在我沒有在螢火蟲中發現更多錯誤,但仍然沒有數據庫條目,這應該意味着它在我的PHP中是確鑿的,對嗎? – linus72982 2011-03-29 04:13:57

0

此外,在IE9中,您可以使用F12來調試和查看錯誤。

+0

沒有冒犯,但IE很久以前就燒燬了他們的橋樑。僅僅因爲缺乏對標準的遵守而導致我花了50個小時的工作。 – linus72982 2011-03-29 04:15:31

+0

只有當它只在IE中失敗時,我纔會使用IE調試器。 – 2011-03-29 04:52:06

+0

Firebug> F12,同意。那裏沒有爭論。但我用它來獲得一些成功的基本事物。 – addfasdf 2011-03-29 05:20:02

0

我看不到sendMessage()被調用在那段代碼中的任何地方。

0

您的代碼只有一個錯誤... document.getElementByID(「xxx」)不是方法。它是document.getElementById(「xxx」)。我試過你的代碼 - 它用參數action = newMessage和message =「無論你在那個盒子裏輸入什麼......」都回到tinChat_process.php。如果你仍然無法解決,你可以發佈chatMess和ajaxBox並告訴我們你正在調用sendMessage()?我添加了一個按鈕來測試呼叫:

<button onclick="sendMessage()">Go</button> 
+0

sendMessage()在提交按鈕的onclick屬性中調用,該屬性位於頁面的前面部分。有一個聊天對象,聊天對象有一個displayInterface函數,頁面調用它並顯示聊天界面。在聊天div的ajax重載時,它向displayInterface發送一個參數,聲明它只是一個重載,並且只重新顯示聊天和用戶部分,而不是輸入文本框,這樣重載不會中斷輸入,因爲它發生了每5秒鐘一次。 – linus72982 2011-03-29 13:21:50

相關問題