PHP的聊天功能。什么原理(不是聊天室) 我看过那些聊天室 就是那种一对一聊天的 而且看样子不是那种靠刷新做的我感觉应该是ajax来做的 不过我前两天试着做了一下 失败了哎 谁有这方面的经验 说一下吧 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我以前问过同样的问题http://hi.csdn.net/link.php?url=http://topic.csdn.net%2Fu%2F20090819%2F01%2F924a04fd-6932-4057-9698-6c9e27ab6749.html 是啊 用ajax每间隔几毫秒读取一下数据就可以了 用ajax每间隔几毫秒读取一下数据就可以了///这还是刷新啊。 你看看这个行不行,可以研究一下啊,在线客服网页聊天的,http://blog.csdn.net/yw1386/archive/2009/12/14/5006228.aspx 这个可以,不过有点不合理,可以搜下 Server Plush 技术。 google->comet(1)客户端ajax发送请求->(2)成功回调函数->(1)客户端ajax发送请求基本上客户端是轮询的模型,不同的是,并不是由客户端不停发送请求,而是发送请求后,php server端检查没任何数据刷新的情况下要hold住请求(使用while循环),while循环里检测数据是否刷新,一旦发生数据刷新,就马上退出while循环,返回数据给客户端,客户端这时候才再次发送请求。 comet 我在看 不过AJAX 似乎不行 除非刷新 ajax可以借用框架, 要不你真是晕了 ajax 就行了.是你不懂ajax,它不用刷新. 这样吗?是没有刷新网页 但是他重新发送了请求 和刷新没有区别 function fs(){ var ajax = cajax(); function ready(){ if(ajax.readyState==4){ var str=ajax.responseText; if(str) document.getElementById("xsh").value=str; document.getElementById("shr").innerHTML=""; document.getElementById("xsh").scrollTop=document.getElementById("xsh").scrollTop+50;} } ajax.open("post","ajaxobj.php?text=laile",true); var yunstr=document.getElementById("shr").innerHTML; ajax.onreadystatechange=ready; yunstr=yunstr.replace(/</g,"<"); yunstr=yunstr.replace(/>/g,">"); post="te="+yunstr; ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); ajax.send(post); document.getElementById("shr").innerHTML=""; } function f5(){ var xhr2 = cajax(); function ready1(){ if( xhr2.readyState==4) document.getElementById("xsh").value=xhr2.responseText; document.getElementById("xsh").scrollTop=document.getElementById("xsh").scrollTop+500; } xhr2.open("post","ajaxobj.php?get2=f5",true); xhr2.onreadystatechange=ready1; xhr2.send(null); } function ms(){ if(document.getElementById("ck0").checked){ if( window.event.keyCode==13){ document.getElementById("13").click(); return false; }} else{ if(event.ctrlKey && window.event.keyCode==13){ document.getElementById("13").click(); return false; }} }setInterval ("f5()",1000); 一般还是用刷新方法的,B/S模式下的 server 端根本没有办法主动推送。上面说的comet我第一次听说,感觉不错,但是对于一些虚拟主机限制IIS连接的就不适用了,而且每个人占用一个连接,长期不释放,不知道会不会占用系统资源 客户端用flash socket 服务端 java socket or c# socket 这样是比较简单的 24楼给我个简单的例子吧 我看看 我刚下了个稍微复杂点的例子 关键是他用了prototype.js 我不了解。。 index.html 记得加载JQUERY.JS<script src="jquery.js"></script><script type="text/javascript"><!-- window.onload = function() { getMsg(0); } function getMsg(time) { $.post("back.php", {'timestamp': time ,"num":Math.random()}, function(data) { var json = eval('('+ data +')'); document.getElementById("txt").innerHTML += json.msg+'<br>'; getMsg(json.timestamp); }); } function send() { var v = document.getElementById('msg').value; $('#msg').val(''); $.post("back.php", {'msg': v ,"num":Math.random()}, function(data) { }); }//--></script><div id="txt" ></div><input type="text" id="msg"><input type="button" value="Send" onclick="send()">back.php<?phpset_time_limit(0);ob_end_clean();$file = dirname(__FILE__). '/data.txt';if(!empty($_REQUEST['msg'])){ file_put_contents($file, $_REQUEST['msg']); die('Write');}$lastmodif = isset($_REQUEST['timestamp']) ? intval($_REQUEST['timestamp']) : 0;$currentmodif = filemtime($file);while($currentmodif <= $lastmodif ){ sleep(2); clearstatcache(); $currentmodif = filemtime($file);}$response = array();$response['msg'] = file_get_contents($file);$response['timestamp'] = $currentmodif;$response['lasttime'] = $lastmodif;echo json_encode($response);flush();?>另外新建data.txt文件 discuz x2插件开发思路,在线等 如何调用扩展名为rtm的报表 PHP解析如下数据结构? PHP如何读取客户端Entiry部分的数据呢? 兄弟姐妹,问号传值的问题 php服务器很难配置 ¥500,谁能帮我用DISCUZ搭建个论坛? 想不起来该怎么办了!!!!!!!!!!急啊!! 请教一个问题 这个时间sql语句如何写? PHP能否调用Infopath的XDocument接口? PHP获取IP的问题
这还是刷新啊。
ajax可以借用框架, 要不你真是晕了
是没有刷新网页 但是他重新发送了请求 和刷新没有区别 function fs(){
var ajax = cajax();
function ready(){
if(ajax.readyState==4){
var str=ajax.responseText;
if(str)
document.getElementById("xsh").value=str;
document.getElementById("shr").innerHTML="";
document.getElementById("xsh").scrollTop=document.getElementById("xsh").scrollTop+50;}
}
ajax.open("post","ajaxobj.php?text=laile",true);
var yunstr=document.getElementById("shr").innerHTML;
ajax.onreadystatechange=ready;
yunstr=yunstr.replace(/</g,"<");
yunstr=yunstr.replace(/>/g,">");
post="te="+yunstr; ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
ajax.send(post);
document.getElementById("shr").innerHTML="";
}
function f5(){
var xhr2 = cajax();
function ready1(){
if( xhr2.readyState==4)
document.getElementById("xsh").value=xhr2.responseText;
document.getElementById("xsh").scrollTop=document.getElementById("xsh").scrollTop+500;
}
xhr2.open("post","ajaxobj.php?get2=f5",true);
xhr2.onreadystatechange=ready1;
xhr2.send(null);
} function ms(){
if(document.getElementById("ck0").checked){
if( window.event.keyCode==13){
document.getElementById("13").click();
return false;
}}
else{
if(event.ctrlKey && window.event.keyCode==13){
document.getElementById("13").click();
return false;
}}
}
setInterval ("f5()",1000);
<script type="text/javascript">
<!--
window.onload = function() {
getMsg(0);
}
function getMsg(time) {
$.post("back.php", {'timestamp': time ,"num":Math.random()}, function(data) {
var json = eval('('+ data +')');
document.getElementById("txt").innerHTML += json.msg+'<br>';
getMsg(json.timestamp);
});
} function send() {
var v = document.getElementById('msg').value;
$('#msg').val('');
$.post("back.php", {'msg': v ,"num":Math.random()}, function(data) {
});
}
//-->
</script>
<div id="txt" ></div>
<input type="text" id="msg"><input type="button" value="Send" onclick="send()">back.php
<?phpset_time_limit(0);
ob_end_clean();$file = dirname(__FILE__). '/data.txt';if(!empty($_REQUEST['msg'])){
file_put_contents($file, $_REQUEST['msg']);
die('Write');
}$lastmodif = isset($_REQUEST['timestamp']) ? intval($_REQUEST['timestamp']) : 0;
$currentmodif = filemtime($file);while($currentmodif <= $lastmodif ){
sleep(2);
clearstatcache();
$currentmodif = filemtime($file);
}$response = array();
$response['msg'] = file_get_contents($file);
$response['timestamp'] = $currentmodif;
$response['lasttime'] = $lastmodif;
echo json_encode($response);
flush();
?>另外新建data.txt文件