douganmo1121 2017-06-06 19:52
浏览 47
已采纳

Ajax - 注意:PHP中使用$ _GET时的未定义索引[重复]

I'm creating for a school assignment a sort of social media platform. I've created a simple chat tool. Each friend relation has a single conversation.

The problem is that when I reload all the chat messages using Ajax, I can't use the $_GET method to get the conversation id which I saved in the url. Without this id I can't use the function in my Chat class. I'm sorry if some code is written in Dutch.

The url looks like this chat.php?gesprek_id=1. Gesprek or Conversation Id is like I said saved in the url. After the Ajax request I receive the notice:

'Notice: Undefined index: gesprek_id in ...'

It refers to the $_GET method in php.

My code:

Chat Class:

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;
}

Php for Ajax

<?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; ?>

Edit in Ajax (added a few lines to find the correct 'gesprek_id' with the solution of the $_GET issue) 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();
});

I hope that my question is clear.

It's also my first question asked in Stackoverflow so I'm sorry if something is not well described. (and sorry if I made some errors in English ;) ) Thank you by advance.

</div>
  • 写回答

1条回答 默认 最新

  • doulao7998636570 2017-06-06 19:55
    关注

    Change your call to

    $(messageList).load('ajax/newChat.php?gesprek_id=abc');
    

    It should start working.

    Basically, you're trying to make a GET request to newChat.php . You're trying to access the same parameter in PHP. Since, there are no GET parameters, GET is throwing a warning.

    But, in this load function. you're not sending any GET parameters. Hence, the change to gesprek_id=abc.

    About doing a polling repeatedly, You need to rewrite the setInterval function better.

    setInterval(function() {
          // Do something every 5 seconds
          loadchat();
    }, 5000);
    

    I'm not sure if this is the ideal way. Something feels a little odd here. But, I would think, there will be better ways of doing this. Anyhow, I've rewritten the setInterval call for you.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 mpich安装完成后出问题
  • ¥15 multisim仿真
  • ¥15 stm32循迹小车代码问题
  • ¥15 输入一堆单词,使其去重输出
  • ¥15 qc代码,修改和添加东西
  • ¥50 Unity的粒子系统使用shadergraph(内置管线)制作的一个顶点偏移shader,但是粒子模型移动时,顶点也会偏移
  • ¥15 如何用python处理excel的数据(极值标准化)
  • ¥15 三向应力状态求剪应力
  • ¥15 jupyter notebook如何添加libGL.so.1库
  • ¥20 easyPoi能否实现下拉多选或者复选框