【发布时间】:2010-07-01 09:14:01
【问题描述】:
我正在尝试构建一个基本的聊天站点,并且有四个文件:chat.html、scripts.html、load.php 和 send.php。
他们在这里:
聊天.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);
加载.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;
?>
最后,send.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 中的 send() 函数。将请求类型更改为 GET 后,我没有比这种方式更多的运气,所以我发布了这个版本。我的代码有什么问题?
【问题讨论】:
-
我可能是平庸的,但是使用任何常见的 AJAX 库在 js 中发出请求都会为您节省很多头发。能调试 XMLHttpRequest 的人不多。
-
你能推荐一个好的吗?
-
我确实使用jquery,所以不能告诉别人。这是基本的 ajax 文档。稍微滚动一下,就会找到示例。
标签: javascript xmlhttprequest chat