你的分享就是我们的动力 ---﹥

模仿韩顺平老师做的web聊天系统,大神帮忙看下出了啥有关问题

模仿韩顺平老师做的web聊天系统,大神帮忙看下出了啥问题
本帖最后由 alakey 于 2014-01-18 22:52:59 编辑

*******chatRoom.php******
<html>
<head>
<?php
//接受open传递的用户名
 $username=$_GET['username'];
 $username=trim($username);
 session_start();
 $loginuser=$_SESSION['loginuser'];
?>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<script type="text/javascript" src="my.js"></script>
<script type="text/javascript">

  window.resizeTo(800,700);
  window.setInterval("getMessage()",3000);

   function getMessage(){
    //创建一个xmlHttpRequest对象
    var myXmlHttpRequest=getXmlHttpObject();
if(myXmlHttpRequest){

 var url="getMessageController.php";
 var data="getter=<?php echo $loginuser; ?>&sender=<?php echo $username; ?>";
 
     myXmlHttpRequest.open("post",url,true);
 myXmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
     myXmlHttpRequest.onreadystatechange=function(){
  if(myXmlHttpRequest.readyState==4){
    if(myXmlHttpRequest.status==200){
  var mesRes=myXmlHttpRequest.responseXML;
  var cons=mesRes.getElementsByTagName("con");
  var sendtimes=mesRes.getElementsByTagName("sendtime");
  if(cons.length!=0){
    for(var i=0;i<cons.length;i++){
 $("mycons").value+="<?php echo $username;?>说:"+cons[i].childNodes[0].nodeValue+"___"+sendtimes[i].childNodes[0].nodeValue;

             
}
  }
}
  }
 }
     myXmlHttpRequest.send(data);
}
  }
  function sendMessage(){
  //创建一个xmlHttpRequest对象
    var myXmlHttpRequest=getXmlHttpObject();
if(myXmlHttpRequest){

 var url="sendMessageController.php";
 var data="con="+$('con').value+"&getter=<?php echo $username; ?>&sender=<?php echo $loginuser; ?>";
 
     myXmlHttpRequest.open("post",url,true);
 myXmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
     myXmlHttpRequest.onreadystatechange=function(){
   if(myXmlHttpRequest.readyState==4){
     if(myXmlHttpRequest.status==200){
   //这里是返回信息,暂不需要
   
 }
   
   }
 
  }
       myXmlHttpRequest.send(data);
}
  }

</script>
</head>
<body>
<center>

<h1>网页聊天室(<font color="blue"><?php echo $loginuser; ?></font>正在和<font color="red"><?php echo $username; ?></font>聊天)</h1>
<textarea cols="60" rows="20" id="mycons"></textarea><br/>
<input type="text" style="width:300px" id="con"/>
<input type="button" value="发送" onclick="sendMessage()"/>
</center>
</body>
</html>

*********getMessageController.php********

<?php
require_once 'MessageService.class.php';
header("content-type:text/xml;charset=utf-8");
header("Cache-Control:no-cache"):
 $getter=$_POST['getter'];
 $sender=$_POST['sender'];
 
 $messageService=new MessageService();

 $messageList=$messageService->getMessage($getter,$sender);
 
 echo $messageList;

 ?>

*********MessageService.class.php********

<?php

require_once 'SqlHelper.class.php';
class MessageService{

 function addMessage($sender,$getter,$con){
$sql="insert into messages (sender,getter,content,sendtime) values ('$sender','$getter','$con',now())";
$sqlHelper=new SqlHelper();
return $sqlHelper->execute_dml($sql);
}

 function getMessage($getter,$sender){
 
    $sql="select * from messages where getter='$getter' and sender='$sender' and isGet=0";
    
    $sqlHelper=new SqlHelper();

$array=$sqlHelper->execute_dql2($sql);
     $messageInfo="<meses>";
    for($i=0;$i<count($array);$i++){
  $row=$array[$i];
      $messageInfo.="<mesid>{$row['id']}</mesid><sender>{$row['sender']}</sender><getter>{$row['getter']}</getter><con>{$row['content']}</con><sendtime>{$row['sendtime']}</sendtime>";
}
     $messageInfo.="</meses>";
 $sqlHelper->close_connect();
     return $messageInfo;
 }

}
?>

大神帮忙看下问题出在哪了?
------解决思路----------------------
没仔细看。单这一句: session_start();
因其前面有html标签的输出,肯定会有“headers already sent”的错误提示的吧?

你都没说你出什么问题了,让大家如何下手
------解决思路----------------------
书写健壮的代码是很重要的
....
if(myXmlHttpRequest.status==200){
  var mesRes=myXmlHttpRequest.responseXML;
  if(mesRes.xml == '') { //如果不是 xml 对象
    alert(myXmlHttpRequest.responseText);//看一下究竟返回了什么
    return;
  }
....

------解决思路----------------------
这个估计也就是个外表吧,性能比较差。
聊天室,采用websockeet或comet,
其次也不必用数据库,redis或文件存储即可
------解决思路----------------------
header("Cache-Control:no-cache"):
这种错误,提示应该很明显吧