动态内容在结合jQuery和PHP时不会不更新


Dynamical content doesn't not update when combining jQuery and PHP

我正在使用PHP和MySQL来构建个人消息系统。"新消息"计数器需要显示每个对话的未读消息数。我正在使用MySQL函数来检查未读消息的数量,并使用JQuery函数来更新计数器。

问题是"新消息"计数器无法正常工作。预期输出是显示每个对话的未读消息数。但是,变量 countMessages 不包含实际的消息计数(因为它应该包含)。

用于获取消息计数的 SQL 查询:

function check_unread_messages($chat_id, $from_id) {
    return (mysql_result(mysql_query("SELECT COUNT(*) FROM `messages` WHERE `group_id` = $chat_id AND `from_id` = $from_id AND `read_on` is NULL"), 0));
}

jQuery-Function,我调用SQL查询并尝试更新显示未读消息数的div:

jQuery(document).ready(function() {
    jQuery(setInterval(function() {
        friends_count = document.getElementsByClassName("user").length;
        for(var i=1; i < friends_count+1; i++) {
            el = document.getElementById(i);
            conv_id = el.getAttribute("data-user-id");
            user_id = el.getAttribute("data-conv-id");
            my_user_id = "<?php echo $session_user_id; ?>";

            cache = "check_unread_messages("+conv_id+", "+user_id+")";
            countMessages = "<?php "+cache+" ?>";
            
            if(countMessages > 99) {
                countMessages = "99+";
            }
            if(countMessages > 0 || countMessages == "99+") {
                document.getElementById("badge-"+i).innerHTML = countMessages;
            }
        }
    }, 500));
});

这是计数器的容器:

<div class="user" id='<?php echo $i ?>' data-user-id='<?php echo $user_id?>' data-conv-id='<?php echo $conversation['id'] ?>'>
    // something, that doesn't matter
    <?php // normaly php gets opend in "something, that doesn't matter"
    echo "<div class='rightCountUnreadMessages'>";
        echo '<div class="badge" id="badge-'.$i.'"></div>';
    echo "</div>";
    ?>
</div>

据我所知,在jQuery函数中,user_idconv_id是正确的。我想,之后的 2 行有问题(cache = ...

尝试将JS与PHP分开,请查看以下示例,了解如何使用AJAX请求来执行此操作。

创建一个新的PHP文件,例如check_unread_messages.php包含:

$chat_id = $_POST['chat_id'];
$from_id = $_POST['from_id'];
$query = mysqli_query("SELECT COUNT(*) FROM `messages` WHERE `group_id` = chat_id AND 
          `from_id` = $from_id  AND `read_on` is NULL")
echo mysqli_result($query , 0);

并使用 ajax POST 请求调用它$.post()如下所示:

$.post('check_unread_messages.php', {chat_id: conv_id, from_id: user_id}, function(result){
   //Here you get response of echo mysqli_result($query , 0); responce in 'result' variable
})

希望这有帮助。