PHP私密聊天长轮询整合

时间:2014-12-03 10:18:24

标签: javascript php jquery ajax mysqli

我在这里有一个简单的问题,

我的聊天内容中有这个表格:

<form action="../addchat.php" method="POST" enctype="multipart/form-data"> 
                    <textarea id="textarea" style="border-radius:0px; border:none; background-color:rgb(243,243,243); min-height:100px;"name="comment" rows="4" cols="50"></textarea><br>
                    <input height="25px" width="20px" style="float:right;" type="image" src="../arrow.png" name="submit" value="Comment">

</form>

此表单供用户提交聊天消息。之后,表单发布会将信息定向到addchat.php,其中包含以下代码:

<?php
ob_start();
session_start();
include_once("config.php");



$reply=mysqli_real_escape_string($mysqli,$_POST['comment']);
$cid=mysqli_real_escape_string($mysqli,$_SESSION['cid']);
$uid=mysqli_real_escape_string($mysqli,$_SESSION['userid']);
$time=time();
$ip=$_SERVER['REMOTE_ADDR'];
$q= mysqli_query($mysqli,"INSERT INTO conversation_reply (user_id_fk,reply,ip,time,c_id_fk) VALUES ('$uid','$reply','$ip','$time','$cid')") or die(mysqli_error($mysqli)); 

?>

这个脚本显然会将数据添加到表格中,之后聊天html页面上的另一个脚本将显示聊天消息。

然而,当前的问题是,首先,在用户点击提交后,页面将重定向到另一个空白页面并显示成功消息。其次,用户需要刷新才能看到新的聊天消息。

这个聊天应用程序是私聊(类似于Facebook),所以不太确定如何做到这一点?非常感谢一些帮助:)

4 个答案:

答案 0 :(得分:0)

如果您不希望它重定向。将PHP代码移动到与表单相同的文件。您可以使用include。 然后制作表格action=""。 然后围绕PHP,您需要检查POST是否存在,以便它仅在表单提交时运行: e.g。

 if (!empty($_POST))

至于刷新问题。您可能想要研究AJAX甚至是socket.io

答案 1 :(得分:0)

标准html表单提交始终将提交(和重定向)到表单的action属性中定义的页面。使用jquery,您可以阻止此默认行为,并使用ajax发送表单数据:

$("form").on("submit", function(event){
   event.preventDefault();
    $.ajax({
        url: "../addchat.php",
        type: "POST",
        cache: false,
        data: {
            comment: $("#textarea").text()
        },
        success: function(data){
            //something you could do on success of your ajax call.
            //you might not need it in this case.
        }
    });
});


其次,您需要一些自动刷新输出区域的过程。在html中创建一个div来显示聊天输出:

<div id="chat_content_div"></div>

然后你必须在你的javascript中做这样的事情来自动刷新它:

var refresh_time = 500; // chat refresh time in ms

setInterval(function(){ 
    $.ajax({
        url: "chat_output.php",
        type: "GET",
        dataType: "html",
        cache: false,
        success: function(data){
            $("#chat_content_div").html(data);
        }
    });
}, refresh_time);

在“chat_output.php”中,您只显示数据库中的(html)数据,以便在此div中显示。

答案 2 :(得分:0)

回答这个问题并不简单,因为它属于您在聊天应用程序中想要的难度/复杂程度。

  1. 如果您在提交时不想重定向,可以使用AJAX发布表单Submit a form using jQuery
  2. 如果您不想刷新页面以加载新的聊天消息,则可以使用AJAX调用在时间间隔http://www.w3schools.com/jsref/met_win_setinterval.asp内获取新消息。
  3. 如果您希望在发件人(与当前用户聊天)发送新聊天消息时收到新消息,您可以考虑使用推送服务器,如NodeJS(http://nodejs.org)或Socket.io({ {3}})

答案 3 :(得分:0)

如果我是你,我不会将PHP用于那个目的,或者如果你这样做,你需要很多ajax来使这个聊天工作。

ajax请求发送... ajax请求每n毫秒获取新消息。您还应该使用api而不是网页与服务器端应用程序进行交互。您的服务器需要高可用性并且响应速度非常快。

您应该选择支持websockets的语言(例如,查看pythondjango,或java,或其他...)如果您想要此聊天真的很有效率。

在编写这些行的时候,我发现了一些东西(Ratchet library)在php中使用websocket(我不知道它是如何工作的但是如果你的服务器的max_execution_time工作,你可能会遇到问题“而真正的“循环”

编辑:正如Tuan Duong所说,nodejs是另一个不错的选择