0

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

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

PHP 可以: -- 将聊天保存到聊天日志文件,并更新聊天室,让每个人都可以看到它。

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

4

5 回答 5

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 重新加载文件,以便用户始终了解它包含的任何消息,这是 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);
}
?>

请注意,我使用了一个会话,这是为了获取登录用户的名称并将其输出到日志文件。我相信你可以看到登录系统如何适应这个,无论如何,在编写之后数据到文件中,我们需要上传它以便用户可以看到:

<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

就是这样,应该可以工作,希望这对你有帮助,以防你还没有得到有用的答案,你会等很长时间。

于 2012-10-19T14:06:25.523 回答
1

您可以在 msg.php 文件中检索聊天消息并使用 jQuery 刷新它并将其包含到您的主文件中。(您的主页面不会加载,但会刷新)。您可以为此使用Prototype,它与 jQuery 相同,但非常易于使用。

于 2012-09-27T01:43:33.493 回答
0

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

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

如果它是一个小规模的网站,那很好。否则我会推荐使用 Erlang 或 Go 编程来支持你的聊天!

于 2012-09-27T01:42:01.730 回答
0

AJAX 应该适合您的需求;它可以从 JS 发送数据由 PHP 处理,并接收任何返回的对象再次由 JS 处理。

教程:http ://css-tricks.com/jquery-php-chat/或 http://code.jenseng.com/jenChat/

于 2012-09-27T01:42:11.077 回答
0

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

PHP 将这些作为常规 POST 请求,因此您可以在后端对它们做任何您想做的事情以返回数据。但是您使用 PHP 来返回数据,而不是发送新网页,因此您可以通过网络发送文本,这是最简单的方式。

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

于 2012-09-27T01:43:01.010 回答