我为学校作业创造了一种社交媒体平台。我创建了一个简单的聊天工具。每个朋友关系都有一个对话。
问题是,当我使用Ajax重新加载所有聊天消息时,我无法使用$_GET
方法获取我保存在网址中的会话ID。如果没有此ID,我无法在Chat
课程中使用该功能。
如果有些代码是用荷兰语写的,我很抱歉。
网址看起来像chat.php?gesprek_id=1
。 Gesprek
或Conversation
ID就像我说保存在网址中一样。在Ajax请求之后,我收到了通知:
'注意:未定义的索引:gesprek_id in ...'
它指的是php中的$ _GET方法。
我的代码:
聊天班:
public function getNewMessages($gesprekId){
$conn = Db::getInstance();
$stm = $conn->prepare("SELECT * from chat WHERE gesprek_id = :gesprek_id AND tijd > :tijd");
$stm->bindValue(":gesprek_id", $gesprekId, PDO::PARAM_STR);
$stm->bindValue(":tijd", $_SERVER['REQUEST_TIME'], PDO::PARAM_STR);
$stm->execute();
$res = $stm->fetchAll();
return $res;
}
Ajax的Php
<?php
header('Content-Type: application/json');
include_once('../classes/Db.php');
include_once('../classes/Chat.php');
session_start();
$gesprekId = $_GET['gesprek_id'];
$chat = new \Kvm\Chat();
$newMessages = $chat->getNewMessages($gesprekId);
?>
<?php foreach ($newMessages as $message): ?>
<?php $profile = $chat->getUserMessage($message['user_id']); ?>
<?php if ($message['user_id'] == $_SESSION['user_id']): ?>
<div id="messageBlock" class="blockRed">
<div class="profile-chat">
<img class="profileSmall" src="<?php echo $profile['avatar']; ?>"/>
<div>
<h4 class="username"><?php echo $profile['firstname'] . ' ' . $profile['lastname']; ?></h4>
</div>
</div>
<p class="message"><?php echo $message['message'] ?></p>
</div>
<?php else: ?>
<div id="messageBlock" class="blockYellow">
<div class="profile-chat">
<img class="profileSmall src="<?php echo $profile['avatar']; ?>"/>
<div>
<h4 class="username"><?php echo $profile['firstname'] . ' ' . $profile['lastname']; ?></h4>
</div>
</div>
<p class="message"><?php echo $message['message'] ?></p>
</div>
<?php endif; ?>
<?php endforeach; ?>
在Ajax中编辑(添加了几行以找到正确的&#39; gesprek_id&#39;以及$ _GET问题的解决方案) AJAX / Jquery的:
$(document).ready(function () {
function loadchat() {
var messageList = $('#allMessages');
var gesprekId = $('.message').attr('data-gesprekId');
$(messageList).load('ajax/newChat.php?gesprek_id='+gesprekId);
}
setInterval(loadchat, 50000);
loadchat();
});
我希望我的问题很明确。
这也是我在Stackoverflow中提出的第一个问题,所以如果没有很好的描述,我很抱歉。 (对不起,如果我用英语犯了一些错误;)) 提前谢谢。
答案 0 :(得分:1)
将您的电话改为
$(messageList).load('ajax/newChat.php?gesprek_id=abc');
应该开始工作了。
基本上,您正在尝试向newChat.php发出GET请求。您尝试在PHP中访问相同的参数。由于没有GET参数,GET正在发出警告。
但是,在这个加载函数中。你没有发送任何GET参数。因此,更改为gesprek_id = abc。
关于重复进行轮询,您需要更好地重写setInterval函数。
setInterval(function() {
// Do something every 5 seconds
loadchat();
}, 5000);
我不确定这是否是理想的方式。这里的东西有点奇怪。但是,我认为,会有更好的方法来做到这一点。无论如何,我已经为你重写了setInterval调用。