Ajax - 注意:在PHP中使用$ _GET时的未定义索引

时间:2017-06-06 19:52:16

标签: php jquery ajax

我为学校作业创造了一种社交媒体平台。我创建了一个简单的聊天工具。每个朋友关系都有一个对话。

问题是,当我使用Ajax重新加载所有聊天消息时,我无法使用$_GET方法获取我保存在网址中的会话ID。如果没有此ID,我无法在Chat课程中使用该功能。 如果有些代码是用荷兰语写的,我很抱歉。

网址看起来像chat.php?gesprek_id=1GesprekConversation 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中提出的第一个问题,所以如果没有很好的描述,我很抱歉。 (对不起,如果我用英语犯了一些错误;)) 提前谢谢。

1 个答案:

答案 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调用。