2012-09-27 68 views
0

我想为我的网站制作一个PHP/JavaScript聊天系统。如何在不刷新页面的情况下做到这一点?制作一个PHP JavaScript聊天室

JavaScript可以: - 动态添加文本到文本框。

PHP可以: - 与聊天记录文件保持聊天,并更新聊天室,以便每个人都可以看到它。

第二部分似乎要求您刷新页面。我不想每次用户说什么都刷新页面。 有没有办法在后台运行PHP而无需执行POST或GET?我是否需要使用不同的服务器端语言,如Python或Ruby?任何帮助,将不胜感激。

+0

欢迎来到SO!传统的答案是Ajax(异步Javascript)。互联网上有成千上万的Ajaxified PHP聊天室教程。未来的网络套接字将接管,但那一天还没有到来。 –

+0

实时聊天是一个复杂的系统来设计和实施,特别是如果你不了解底层技术如何工作。最好的建议是搜索第三方聊天系统现成的整合。 –

+0

php + js不是这个任务的最佳堆栈imo,[node.js + js](http://chat.nodejs.org/)是。 – moonwave99

回答

0

如果你不希望页面刷新,你可以使用Ajax post。这是一个实现。

http://css-tricks.com/jquery-php-chat/

如果是小规模的网站,然后它的罚款。否则,我会建议使用Erlang或Go编程来为您的聊天提供动力!

0

有几种方式使用JavaScript和PHP来做到这一点。最基本的是通过Javascript的XMLHttpRequest函数发送您的Javascript POST请求。这使您可以在不重新加载页面的情况下发送和接收数据。谷歌“AJAX”有关如何以这种方式发送数据并处理结果的信息。

PHP将这些作为常规的POST请求,因此您可以根据返回的数据在后端执行任何操作。但是你使用PHP来返回数据,而不是发送一个新的网页,所以你可以通过网络发送文本,这是最简单的方式。

出于聊天室的目的,AJAX需要您的JavaScript代码每隔几秒轮询服务器以查看是否有新的聊天记录进来。这不是非常有效。你真正想要的是服务器上的某些东西,它可以保持与客户端的连接并告诉它什么时候发生了变化。为此,您需要在JavaScript中使用Websockets,并创建一个PHP套接字服务器。如何实际做这两件事情超出了这个答案的范围。但是使用你所谈论的技术是可能的。

1

您可以在msg.php文件中检索聊天消息,并使用jQuery进行刷新并将其添加到您的主文件中(您的主页不会加载,但会刷新)。 您可以使用原型为这与它相同的jQuery,但非常容易使用。

+4

而且我们希望没有必要再把每个单词都用上! – moonwave99

1

如果您想制作只使用一个日志文件的聊天室应用程序,即您网站上的每个人都登录到同一个房间,那么使用php和ajax以及一些jquery并不难。这里是一个过程:你想让用户输入一条消息并发送它,对吗?,你所需要的是一种形式:

<form name="message" action=""> 
    <input name="usermsg" type="text" id="usermsg" size="63" /> 
    <input name="submitmsg" type="submit" id="submitmsg" value="Send" /> 
</form> 

这是窗体的标记,接下来,你需要的东西,无缝需要在用户输入,无论用户输入到文本框中,并将其发送一个脚本,这就是AJAX进来:这样做后

<script type="text/javascript" src="jquery-1.8.0.min.js"></script> 
<script type="text/javascript" > 
//when the user clicks the button with the id submitmsg, the input is taken 
$("#submitmsg").click(function(){ 
    var clientmsg = $("#usermsg").val(); 
      //after the input's value is taken, it's sent to a script called 
      //pst.php 
    $.post("post.php", {text: clientmsg}); 
      //after the message is sent, the input's value is set to null 
      //to allow the user to type a new message    
    $("#usermsg").attr("value", ""); 
    return false; 
}); 
</script> 

,我们需要看到剧本post.php中的样子和它做什么,基本上,它抓住通过Ajax和发送给它的输入将其写入文件,然后将文件加载到网页上,然后可以查看用户之间发送的所有消息,并在一段时间后使用ajax进一步重新加载文件,以便使用的r是始终与它包含的任何消息的速度,这里的PHP脚本:

<? 
session_start(); 
if(isset($_SESSION['name'])){ 
$text = $_POST['text']; 

$fp = fopen("log.html", 'a'); 
fwrite($fp, "<div class='msgln'><b>".$_SESSION['name']."</b>: ".stripslashes(htmlspecialchars($text))."<br></div>"); 
fclose($fp); 
} 
?> 

注意,我使用的会话,这是获取用户的是登录名,并输出到日志file.i'm确保您可以看到登录系统将如何适应这个,反正,将数据写入到文件后,我们需要上传它,因此用户可以看到:

<div id="chatbox"> 
<?php 
if(file_exists("log.html") && filesize("log.html") > 0){ 
    $handle = fopen("log.html", "r"); 
    $contents = fread($handle, filesize("log.html")); 
    fclose($handle); 

    echo $contents; 
} 
?> 
</div> 

这就是师在那里日志文件将被加载,现在,只剩下一件事,我们需要在一段时间后重新加载文件,并且可能添加自动滚动功能:

//Load the file containing the chat log 
function loadLog(){  
    var oldscrollHeight = $("#inner").attr("scrollHeight") - 20; 
    $.ajax({ 
     url: "log.html", 
     cache: false, 
     success: function(html){   
      $("#inner").html(html); //Insert chat log into the #chatbox div    
      var newscrollHeight = $("#inner").attr("scrollHeight") - 20; 
      if(newscrollHeight > oldscrollHeight){ 
       $("#inner").animate({ scrollTop: newscrollHeight }, 'normal'); //Autoscroll to bottom of div 
      }    
     }, 
    }); 
} 
setInterval (loadLog, 2500); //Reload file every 2.5 seconds 

就是这样,这应该工作,希望这有助于在您还没有得到有用的答案,你会等待很长时间。

+0

这是肯定不会做聊天室。你直接写入html文件?为什么不是TXT或更好呢,像你应该使用MySQL。通过AJAX聊天室,您不会显示,如何避免多次调用服务器问题。另外,是什么阻止它双击服务器? –

+0

嗯,这不是最好的方式,但它的工作原理。如果你读到这个问题,他暗示他想使用日志文件:“PHP可以: - 保存聊天日志文件的聊天,并更新聊天室,以便每个人都可以看到它。”所以我给出了一个可以使用这种方法的答案。最好的方法是使用网络套接字,但我再次根据他所寻找的内容给出了答案;一种使用文件的方法。要保存到TXT,只需将扩展名从html更改为txt。 – 2014-03-06 15:10:10