仅使用 jQuery (Ajax) 和 PHP 从 MySQL 获取最新消息? (在线聊天APP)
Posted
技术标签:
【中文标题】仅使用 jQuery (Ajax) 和 PHP 从 MySQL 获取最新消息? (在线聊天APP)【英文标题】:Get the latest messages only from MySQL using jQuery (Ajax) and PHP ? (Live Chat APP) 【发布时间】:2017-11-12 16:42:32 【问题描述】:我试图弄清楚如何从 mysql 中获取尚未获取的最新(最新)消息。
我想要什么: 如果用户 A 发送消息,我希望用户 B 获取该消息,但只获取一次。我不想获取所有内容,因为从长远来看这会很糟糕。
我目前的解决方案有点工作,但问题是它有时会获取相同的消息两次,另一个问题是 如果客户在哪里得到延迟峰值,他会错过这些消息,因为当前的解决方案基于时间框架。
我目前得到的:
jQuery (Ajax)
setInterval(function ()
console.log('Attempting to update');
$.ajax(
type: "GET",
url: "palenc.php?hb=<?php echo $hb; ?>",
dataType: "json",
success: function(data)
if (data == 2)
console.log('No messages to fetch');
else
var password = "<?php echo $key; ?>";
for (i = 0; i < data.length; ++i)
var from = data[i][0];
var emsg = data[i][1];
var pmsg = decrypt(emsg, password);
var msg = pmsg.toString(PalieEncryption.enc.Utf8);
$("#chat").append('<div class="left spotmsg"><div class="chat-
avatar pull-left"><img src="https://example.net/img/them.png"
></div><div class="message">
<div class="arrow-left"></div><p><strong>@'+from+'</strong></p>
<p
class="txt">'+msg+'</p></div></div>');
$('textarea').focus();
$(".chat_area").animate( scrollTop: $(".chat_area")
[0].scrollHeight, 1000);
);
, 1350);
PHP
$stmt = $mysqli->prepare('SELECT chat_user, chat_msg FROM chat_msg
WHERE chat_id = ? AND chat_time > (NOW() - INTERVAL 2 SECOND) AND
chat_user != ?');
$stmt->bind_param('ss', $id,$_SESSION['sess_user']);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_all())
header('Content-Type: application/json');
ob_end_clean();
echo json_encode($row);
【问题讨论】:
您可以添加一个带有布尔标志的额外列,并UPDATE
'ing 该列。关于您的“有时两次获取相同的消息”,您可以使用 DISTINCT / GROUP BY。
你能给我举个例子吗? MySQL 不是我的强项
【参考方案1】:
假设您在消息表上有一个自动递增的主键,为什么不将主键与消息一起发送给客户端?然后当客户端请求更新消息时,它可以将最近收到的消息的主键发回,服务器可以查询该用户的所有消息,主键大于返回的主键。
【讨论】:
好主意!这应该可以,但是如何在不使用 cookie 或会话的情况下将最后一个 ID 从 jQuery 传递给 PHP? O_o 等等,由于客户端没有重新加载页面,我可以将其存储在 VAR 中,对吧? @Persson 客户端发起新消息请求,对吧?然后在 GET 请求中包含最新的消息 ID。当客户端请求新消息时,使用 $.ajax 数据选项将 last_message_id 作为 GET 参数传递。然后使用 $_GET 关联数组在 PHP 中读取它。以上是关于仅使用 jQuery (Ajax) 和 PHP 从 MySQL 获取最新消息? (在线聊天APP)的主要内容,如果未能解决你的问题,请参考以下文章
使用 Jquery、AJAX 和 PHP 从 MySQL 数据库中检索数据
使用 Ajax 和 JQuery 从 PHP 文件中获取数据