2010-07-01 111 views
0

我想建立一個基本的聊天站點,並有四個文件:chat.html,scripts.html,load.php和send.php。xmlhttp請求不能正常工作

在這裏,他們是:

chat.html:

<html> 
    <head> 
     <title>Josh's Python Chat Website</title> 
     <script type="text/javascript" src="chatscripts.js"> 
     </script> 
    </head> 
    <body> 
     <div id="divUsername" style=" 
      position: absolute; 
      padding: 0px; 
      margin: 0px; 
      top: 10px; 
      left: 10px; 
      height: 26px; 
      width: 400px;"> 
      Username: <input type="text" id="username" /> 
     </div> 

     <div id="display" style=" 
      border-style: solid; 
      border-width: 1px; 
      overflow:auto; 
      position: absolute; 
      padding: 0px; 
      margin: 0px; 
      top: 46px; 
      left: 10px; 
      height:400px; 
      width:400px;"> 
     </div> 

     <div id="divLineInput" style=" 
      position: absolute; 
      padding: 0px; 
      margin: 0px; 
      top: 456px; 
      left: 10px; 
      height: 26px; 
      width: 400px;"> 
      <input type="text" id="line" size="50" onkeydown="if(event.keyCode==13) send()" /> 
      <input type="button" id="sendbutton" value="Send" onclick="send()" /> 
     </div> 
    </body> 
</html> 

scripts.js中:

function load(){ 
    var xmlhttp = new XMLHttpRequest(); 
    var params=""; 
    xmlhttp.open("GET", "load.php", true); 
    // xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    xmlhttp.onreadystatechange = function() { 
     if(xmlhttp.readyState==4 && xmlhttp.status==200){ 
      var display = document.getElementById("display");   
      display.innerHTML = xmlhttp.responseText; 
      display.scrollTop = display.scrollHeight; 
     } 
    } 
    xmlhttp.send(params); 
} 

function send(){ 
    var xmlhttp = new XMLHttpRequest(); 
    var url="send.php"; 
    var d = new Date(); 
    var username = document.getElementById("username"); 

    if (username.value==null || username.value==""){ 
     alert("Please enter a username."); 
     username.focus(); 
     return false; 
    } 

    var line = document.getElementById("line"); 
    var params= "time=" + d.getTime().toString() + "&user=" + username.value + "&line=" + line.value; 
    xmlhttp.open("POST", url, true); 
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    xmlhttp.onreadystatechange = function(){} 
    xmlhttp.send(params); 

    document.getElementById("line").value = ""; 

    load(); 
    line.focus(); 
} 

load(); 
setInterval("load()", 3000); 

load.php:

<?php 
error_reporting(E_ALL); 
ini_set("display_errors", 1); 

$dbhost = "localhost"; 
$dbuser = "root"; 
$dbpass = "password"; 
$dbname = "website"; 

$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ("Error connecting to database"); 
mysql_select_db($dbname); 

$query = "select * from chat"; 
$result = mysql_query($query); 
$num = mysql_numrows($result); 

$response = ""; 
$i = 0; 
while($i < $num){ 
    $response .= "<p>" . mysql_result($result, $i, "user") . ": " . mysql_result($result, $i, "line") . "</p>"; 
    $i++; 
} 

mysql_free_result($result); 
mysql_close($conn); 

echo $response; 
?> 

最後,送.php:

<?php 
error_reporting(E_ALL); 
ini_set("display_errors", 1); 

$dbhost = "localhost"; 
$dbuser = "root"; 
$dbpass = "password"; 
$dbname = "website"; 

$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ("Error connecting to database"); 
mysql_select_db($dbname); 

$query = "insert into chat (time, user, line) values ('" . $_GET['time'] . "', '" . $_GET['user'] . "', '" . $_GET['line'] . "')"; 
mysql_query($query); 
mysql_close($conn); 
?> 

該網站加載聊天條目我把插入到MySQL數據庫使用命令行客戶端。 send.php工作爲好,因爲當我打電話

localhost/send.php?time=12345&user=Herrturtur&line=HelloWorld 

在瀏覽器的地址欄中,「Herrturtur:HelloWorld」的在重新加載時聊天窗口中顯示出來。

創建數據庫的腳本如下:

create table chat (time INT(16), user VARCHAR(256), line TEXT); 

所以我想它一定是在scripts.js中發送()函數。將請求類型更改爲GET後,我沒有比這種方式更幸運的了,所以我發佈了這個版本。我的代碼有什麼問題?

+2

我可能是平凡的,但使用任何常用的AJAX庫,以使JS請求將節省您大量的頭髮。沒有多少人可以調試XMLHttpRequest。 – 2010-07-01 00:34:17

+0

你能推薦一個好的嗎? – lowerkey 2010-07-01 00:35:47

+1

我確實使用jquery,所以不能告訴別人。這裏是基本的ajax文檔。如果你滾動一下,你會發現一些例子。 – 2010-07-01 00:48:41

回答

1

直接調用XMLHttpRequest就像使用blink標記一樣:沒有任何東西來自它。

使用庫!

  • 你想要做很多Javascript嗎?然後嘗試更大的庫,例如JQuery或YUI。
  • 如果您只想要最小化,您可以使用mooTools或其他小型庫。
  • Google爲其CDN(內容分發網絡)提供最受歡迎的圖書館。看到http://code.google.com/apis/ajaxlibs/
+1

如果您決定需要使用其中的幾項功能(如DOM操作或視覺效果),請使用庫。加載一個30KB的庫只是因爲你需要10行代碼的幫助,這是過分的。如果你想要輕量且快速的東西,那麼編寫你自己的代碼是不可替代的。另外你可能會了解瀏覽器的工作方式。 – Andrew 2010-07-01 01:11:39

1

是事件被解僱嗎?開始在theres中放置一些console.logs並診斷你的函數是否被調用。

編輯 - 等待,是您的腳本名稱與標記中的內容不匹配。

+0

你的腳本名稱與標籤中的內容不符?我再次檢查,兩個標記中的腳本名稱是「send()」,而scripts.js中是「send()」。我將查找console.logs的含義。 – lowerkey 2010-07-01 00:59:55

+0

  • 11. AJAX XMLHTTP請求
  • 12. xmlhttp請求
  • 13. 要求JS不能正常工作
  • 14. 要求全屏不能正常工作
  • 15. 要求函數不能正常工作
  • 16. 使用NSURL不能正常工作的GET請求
  • 17. 好友請求對外部網站不能正常工作
  • 18. 亞馬遜API簽署的請求不能正常工作
  • 19. JSONP請求使用jquery $ .getJSON不能正常工作JSON
  • 20. Kohana 3 jQuery/AJAX請求不能正常工作
  • 21. POST請求在VB.NET不能正常工作
  • 22. mod_rewrite多個請求不能正常工作
  • 23. 外部JSON請求WebApi2不能正常工作
  • 24. AFNetworking 2.0 POST請求不能正常工作
  • 25. Facebook請求對話框過濾器app_non_users不能正常工作
  • 26. RSpec +水豚請求規格w/JS不能正常工作
  • 27. 的Picasa getAlbum請求不能正常工作的Android
  • 28. Ajax請求不能正常工作任何時候都
  • 29. xmlhttp不工作
  • 30. 不能.getJSON請求工作