<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<HTML xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>
</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css">
body{ margin:0; padding:0; font-size:12px; } #messagewindow { height: 250px; border: 1px solid; padding: 5px; overflow: auto; } #wrapper { margin: auto; width: 438px; }
</style><!-- 引入jQuery --><script type="text/javascript">
//<![CDATA[
$(function(){
//定義時間戳記
timestamp = 0;
//調用更新資訊函數
updateMsg();
//表單提交
$("#chatform").submit(function(){
$.post("backend.php",{
message: $("#msg").val(),
name: $("#author").val(),
action: "postmsg",
time: timestamp
}, function(xml) {
//清空資訊文字框內容
$("#msg").val("");
//調用解析xml的函數
addMessages(xml);
});
return false; //阻止表單提交
});
});
//更新資訊函數,每隔一定時間去服務端讀取資料
function updateMsg(){
$.post("backend.php",{ time: timestamp }, function(xml) {
//移除掉 等待提示
$("#loading").remove();
//調用解析xml的函數
addMessages(xml);
});
//每隔4秒,讀取一次.
setTimeout('updateMsg()', 4000);
}
//解析xml文檔函數,把資料顯示到頁面上
function addMessages(xml) {
//如果狀態為2,則終止
if($("status",xml).text() == "2") return;
//更新時間戳記
timestamp = $("time",xml).text();
//$.each迴圈資料
$("message",xml).each(function() {
var author = $("author",this).text(); //發行者
var content = $("text",this).text(); //內容
var htmlcode = "<strong>"+author+"</strong>: "+content+"<br />";
$("#messagewindow").prepend( htmlcode ); //添加到文檔中
});
}
//]]>
</script>
</head><body>
<div id="wrapper">
<p id="messagewindow">
<strong>
$message[user]
</strong>
: $message[msg]
<br>
<strong>
$message[user]
</strong>
: $message[msg]
<br>
<strong>
$message[user]
</strong>
: $message[msg]
<br>
<strong>
$message[user]
</strong>
: $message[msg]
<br>
</p><form id="chatform" action="#">
姓名:
<input id="author" size="50" type="text">
<br>
內容:
<input id="msg" size="50" type="text">
<br>
<input value="發送" type="submit">
<br>
</form>
</div>
</body>
</html>
<?php
// 配置資訊:
// 1,資料庫連接的具體資訊
// 2,我們要儲存的訊息的數目
// 3,使用者進到聊天室的時候訊息顯示的數目
$dbhost = "localhost";
$dbuser = "root";
$dbpass = "root";
$dbname = "chat";
$store_num = 10;
$display_num = 10;
// 錯誤報表
error_reporting(E_ALL);
// 頭部資訊
header("Content-type: text/xml");
header("Cache-Control: no-cache");
//串連mysql
$dbconn = mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname,$dbconn);
//為容易操作請求資料,我們為請求中的每個參數設定一個變數,每個變數將把請求中的參數值作為其自己的值
//foreach語句遍曆所有的POST資料,並且為每個參數建立一個變數,並且給它賦值
foreach($_POST as $key => $value){
$$key = mysql_real_escape_string($value, $dbconn);
}
//屏敝任何錯誤提示,判斷action是否等於 postmsg
if(@$action == "postmsg"){
//插入資料
mysql_query("INSERT INTO messages (`user`,`msg`,`time`)
VALUES ('$name','$message',".time().")",$dbconn);
//刪除資料(因為我們預設值儲存10條資料)
mysql_query("DELETE FROM messages WHERE id <= ".
(mysql_insert_id($dbconn)-$store_num),$dbconn);
}
//查詢資料
$messages = mysql_query("SELECT user,msg
FROM messages
WHERE time>$time
ORDER BY id ASC
LIMIT $display_num",$dbconn);
//是否有新記錄
if(mysql_num_rows($messages) == 0) $status_code = 2;
else $status_code = 1;
//返回xml資料結構
echo "<?xml version=/"1.0/"?>/n";
echo "<response>/n";
echo "/t<status>$status_code</status>/n";
echo "/t<time>".time()."</time>/n";
if($status_code == 1){ //如果有記錄
while($message = mysql_fetch_array($messages)){
$message['msg'] = htmlspecialchars(stripslashes($message['msg']));
echo "/t<message>/n";
echo "/t/t<author>$message[user]</author>/n";
echo "/t/t<text>$message[msg]</text>/n";
echo "/t</message>/n";
}
}
echo "</response>";
?>
所產生的XML檔案!!
<?xml version="1.0" encoding="UTF-8"?>
<response>
<status>1</status>
<time>1170323512</time>
<message>
<author>張三</author>
<text>沙發!</text>
</message>
<message>
<author>李四</author>
<text>板凳!</text>
</message>
</response>