• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

php 搞代码 4年前 (2022-01-23) 20次浏览 已收录 0个评论
文章目录[隐藏]
*******chatRoom.php******<?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[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><body><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 />*********getMessageController.php********<?phprequire_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********<?phprequire_once 'SqlHelper.class.php';class MessageSer<strong>*本文来源gaodai#ma#com搞@代~码^网+</strong><strong>搞代gaodaima码</strong>vice{ 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="";    for($i=0;$i<count($array);$i++){	  $row=$array[$i];      $messageInfo.="{$row['id']}{$row['sender']}{$row['getter']}{$row['content']}{$row['sendtime']}";	}     $messageInfo.="";	 $sqlHelper->close_connect();     return $messageInfo; }}?>

大神帮忙看下问题出在哪了?

回复讨论(解决方案)

没仔细看。单这一句: session_start();
因其前面有html标签的输出,肯定会有“headers already sent”的错误提示的吧?

你都没说你出什么问题了,让大家如何下手

没仔细看。单这一句: session_start();
因其前面有html标签的输出,肯定会有“headers already sent”的错误提示的吧?

你都没说你出什么问题了,让大家如何下手

 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){          //注释1 window.alert("aaa");          var mesRes=myXmlHttpRequest.responseXML;          var cons=mesRes.getElementsByTagName("con");          var sendtimes=mesRes.getElementsByTagName("sendtime");          //注释2 window.alert("bbb");          if(cons.length!=0){            for(var i=0;i说:"+cons[i].childNodes[0].nodeValue+"___"+sendtimes[i].childNodes[0].nodeValue;                                       }          }        }      }     }     myXmlHttpRequest.send(data);    }  }

主要就是回调函数出问题, 注释1处的能响应,但是注释2处的window.alert就无法响应。大神帮忙看下。

书写健壮的代码是很重要的

....if(myXmlHttpRequest.status==200){  var mesRes=myXmlHttpRequest.responseXML;  if(mesRes.xml == '') { //如果不是 xml 对象    alert(myXmlHttpRequest.responseText);//看一下究竟返回了什么    return;  }....

这个估计也就是个外表吧,性能比较差。
聊天室,采用websockeet或comet,
其次也不必用数据库,redis或文件存储即可

书写健壮的代码是很重要的

....if(myXmlHttpRequest.status==200){  var mesRes=myXmlHttpRequest.responseXML;  if(mesRes.xml == '') { //如果不是 xml 对象    alert(myXmlHttpRequest.responseText);//看一下究竟返回了什么    return;  }....

谢谢,已经解决了,怪我粗心了,原来是MessageService.class.php中,第二个header()的分号写成了冒号,晕死啊!

这个估计也就是个外表吧,性能比较差。
聊天室,采用websockeet或comet,
其次也不必用数据库,redis或文件存储即可

嗯,谢谢了。

header(“Cache-Control:no-cache”):
这种错误,提示应该很明显吧

谢谢,已经解决了,怪我粗心了,原来是MessageService.class.php中,第二个header()的分号写成了冒号,晕死啊!

我的错误跟你的一样,但是MessageService.class.php并没有使用header()呀??


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:模仿韩顺平老师做的web聊天系统,大神帮忙看下出了啥问题

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址