【问题标题】:PHP Ajax Load only new contentPHP Ajax 仅加载新内容
【发布时间】:2016-01-31 08:06:19
【问题描述】:

我现在正在做一个简单的聊天,它已经在工作,但效率不高。 每当我运行我的脚本时,它都会刷新整个聊天并一遍又一遍地加载内容。

我正在尝试找到一种方法,让脚本只从我的聊天数据库中加载新内容,而不应一遍又一遍地加载旧消息。

这是我的 index.php 中的部分:

<div id="chat" class="full rund">

<table border="1" class="full chattable">
            <?php
            $abfrage = "SELECT * FROM chat";
            $ergebnis = mysql_query($abfrage);
            while($row = mysql_fetch_object($ergebnis)) {?>
                <tr class="chattr">
                    <td style="width:200px;"><h3 class="text">&#428;&#968;&#428; &#9762; <?php echo $row->name;?>:</h3></td>
                    <td style="width:440px;"><p><h3 class="text"><?php echo $row->text;?></h3></p></td>
                    <td style="width:160px;"><h3 class="text"><?php echo $row->timestamp;?></h3></td>
                </tr>
            <?php
            }
            ?>
        </table>
    </div>

这是我的 chat.js:

setInterval( "updateShouts()", 1000 );

function fx(form,target){
var _target=target;
var url=form.action;  
var data=$(form)[(form.method.match(/^post$/i))?'serializeArray':'serialize']();
$(_target).load(url,data,function(){setTimeout(function(){
$(_target).empty();
},0);});
return false;} 

function updateShouts(){ $('#chat').load('php/latestMsg.php'); }

我的 latestMsg.php(与索引相同):

<div id="chat" class="full rund">

    <table border="1" class="full chattable">
                <?php
                $abfrage = "SELECT * FROM chat";
                $ergebnis = mysql_query($abfrage);
                while($row = mysql_fetch_object($ergebnis)) {?>
                    <tr class="chattr">
                        <td style="width:200px;"><h3 class="text">&#428;&#968;&#428; &#9762; <?php echo $row->name;?>:</h3></td>
                        <td style="width:440px;"><p><h3 class="text"><?php echo $row->text;?></h3></p></td>
                        <td style="width:160px;"><h3 class="text"><?php echo $row->timestamp;?></h3></td>
                    </tr>
                <?php
                }
                ?>
            </table>
        </div>

我希望任何人都可以帮助我,我已经搜索了很长时间,但我找不到任何可以解决我的问题的东西! 谢谢:)

【问题讨论】:

  • 我可能会在服务器上的会话中跟踪哪些消息已经发送给用户。带有时间戳或最后发送消息的 ID。
  • 他可能想要查看的是 web-sockets...那么您根本不必更新页面。

标签: javascript php jquery ajax chat


【解决方案1】:

2 个解决方案。

  1. 当然,您需要一种方法将您的消息标记为已读,每个用户都是如此。

  2. 您可以忽略它,只回读最后 X 条消息。

【讨论】:

  • 最后 x 条消息可能是暂时的……即最后 x 分钟。 OP 可能会发现关于 SIP、XMPP、IRC 等的 RFC 是很好的读物。
【解决方案2】:
  1. 在您的聊天表中,您必须添加“未读”字段或其他内容,以识别消息状态(已读/未读),与@geggleto 解决方案相同

  2. 将过滤器添加到您的查询中,如下所示:

    $abfrage = "SELECT * FROM chat WHERE timestamp between '$from' AND '$to' ";

以确保您有按时间限制消息的角色

【讨论】:

  • 感谢您的回答! :) 但是如果我只添加一个过滤器,我的旧消息就会消失,因为整个 div 每秒都会刷新一次,并用新消息替换 div 内容。如何管理新消息将显示在我的旧消息下方而不删除我的旧消息?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-30
  • 1970-01-01
  • 2011-06-17
  • 1970-01-01
  • 1970-01-01
  • 2014-06-23
  • 2013-03-13
相关资源
最近更新 更多