javascript - PHP/Javascript 刷新

标签 javascript php jquery

我们的网站上有一个即时消息聊天系统。它基本上只是一个嵌入的框,列出了文本,底部有一个栏,用于提交写入文件的新文本。

目前,当您提交新消息时,您必须刷新页面才能显示该消息和其他消息。如何做到有新消息时自动刷新或显示该消息?

<!-- BEGIN CHAT -->
<div id='categories' class='ipsLayout_content clearfix'>
<div id='' class='brown_box_forum brown_box_stack'>
<table class="forum_group">
<tbody>
<tr>
<td style="background: -webkit-gradient(linear, left top, left bottom, from(#412E0E), to(#513A13));
background: -moz-linear-gradient(top, #412E0E, #513A13);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#412E0E', endColorstr='#513A13');
-ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#412E0E', endColorstr='#513A13');padding-top: 1px;
font-size: 14px; font-weight:bold;" align="center">
<div id="toggleBoardStats" class="groupname" style="text-align:center;cursor:pointer;">RuneMechanics Chat</div>

</td>
</tr>
</tbody>
</table>

<table class="forum_group" id="">
<tbody>
<tr class="spacer"><td colspan="5"></td></tr>
<tr>
  <td>
  <div style="height: 165px; width: 100%;">
    <div id="" style="height:11px; overflow-y: auto; word-wrap: break-word; text-align: left; padding: 0px; font-style:none; font-size:12px; padding-bottom:7px; padding-left: 6px;">[00:00:00] GLOBAL: <i>There is a slight delay when sending messages, please be patient. | Chatbox Feedback: <a href="**/forums/?showtopic=372">Here</a></i></div>

    <div id="ChatStream" style="height: 110px; overflow-y: auto; word-wrap: break-word; text-align: left; padding: 5px; scrollbar-face-color: #3B3B3B;"></div>


  <div style="bottom: 5px; width: 100%; margin-top: 5px; padding-bottom: 5px;">
    <form id="Messenger" method="POST">
      <span style="padding: 5px; padding-left: 3px;">
        <input id="messageText" type="text" style="width: 99%; background:#4D3F27; border: none; color: #D6C6AB;" name="message" placeholder="Message..." autocomplete="off" />
      </span>
      <button id="sendMessage" style="height:0; width:0; background: #392c14; border:none;">Send</button>
    </form>             
  </div>


</div>  
</td>
</tr>
</tbody>
</table>

</div>

<script type="text/javascript">
var chatFrozen = false;
var chatOpen   = true;
jQuery(function($) {
  $('#ChatStream').load('../libs/Chat/chatContent.file', function(){
    $('#ChatStream').animate({ scrollTop: $('#ChatStream')[0].scrollHeight }, 500);
  });
  window.setInterval(function(){
      if ( !chatFrozen && chatOpen )
      {
        if ( $('#ChatStream').scrollTop() >= ( $('#ChatStream')[0].scrollHeight ) )
    {
      $('#ChatStream').animate({ scrollTop: $('#ChatStream')[0].scrollHeight }, 500);
    }
      }
  }, 200);

  $('#sendMessage').click(function(e) {
    e.preventDefault();
    $.post('../libs/Chat/Message.php', $('#Messenger').serialize(), function( data ) {
      $('#ChatStream').animate({ scrollTop: $('#ChatStream')[0].scrollHeight }, 500);
    });
    $('#messageText').val('');
    if ( $('#ChatStream').scrollTop() >= ( $('#ChatStream')[0].scrollHeight - 200 ) )
    {
      $('#ChatStream').animate({ scrollTop: $('#ChatStream')[0].scrollHeight}, 500);
    }
  });
});
</script>
<!-- END CHAT -->

最佳答案

您想要将信息推送给客户端,而不是请求信息的客户端。如果客户端要请求信息,他应该每 X 秒发出一次请求,以检查是否有新消息。这可扩展性不太好,并且会产生至少几秒钟的延迟。

问题是,PHP 是一种非常适合在发出请求时用于提供数据的语言。如果您没有其他语言可用,我强烈建议使用外部服务,例如 Pusher.comPubnub.com创建实时应用程序。

这些服务为您提供客户端 Javascript 库和服务器端 PHP 库。您在 PHP 脚本中发送一条推送消息,订阅 channel 的客户端会立即收到该消息。非常适合像您这样的聊天应用程序。

关于javascript - PHP/Javascript 刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22442772/

相关文章:

javascript - 在 SCEditor 中将列表项标记设置为 [*]x 而不是 [li]x[/li],以实现 vBulletin 兼容性

javascript - 我的 Google Fonts 字体不会再显示在我的网站上

php - 安全浏览 API v4。 - 空响应

jquery 在加载时从页面中删除源代码?

jquery - 使用 Jquery 检测 Chrome 保存的输入信息?

javascript - 在 Javascript 中将时间戳转换为不同时区的值

php - Codeigniter DB Query with where, or, and.. and like

php - 照亮\数据库\QueryException : SQLSTATE[HY000] [2002] Connection refused default character set utf8mb4 collate utf8mb4_unicode_ci

jquery - 鼠标悬停时更改 .gif

javascript - 是否可以通过javascript访问本地文件?