正确加载并显示新邮件

时间:2016-01-21 16:28:51

标签: javascript php jquery mysql

我有一个问题: 我试图在我的网站上创建一个个人消息系统,对于这个我的想法是,用户在每个聊天中显示新消息的数量...... 与此screenshot

一样

是的,我来自德国,截图中的语言是德语... 你看到红色"框"有多少?我想为每次聊天创建这个,但我不知道如何。使用PHP只会这很容易,但我想,数字是正确的,并自动刷新...

所以我的HTML代码是:

<div class="chat_body"> 
    <a href="index.php?section=pn&mode=loadConversation&ConversationID=<?php echo $conversation['id']; ?>">
        <div class="user" id='<?php echo $i ?>' data-user-id='<?php echo $user_id?>' data-conv-id='<?php echo $conversation['id'] ?>'>
            // Displaying the name, etc... (for clarity i left it out)
        <?php                   
            echo "<div class='rightCountUnreadMessages'>";
                echo '<div class="badge" id="badge-'.$i.'"></div>';
            echo "</div>";
        ?>
        </div>
    </a>
</div>

在页面顶部,我加载数字的Javascript是:

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-conv-id");
            user_id = el.getAttribute("data-user-id");
            test = i;

            jQuery.post('./Bauteile/Accounts/loadCounts/loadPNCount.php', {user_id_loadPN: user_id, conv_id: conv_id}, function(result){
                console.log(result);
                console.log(test);

                if(result > 99) {
                    result = "99+";
                }

                if(result > 0 || result == "99+") {
                    document.getElementById("badge-"+test).innerHTML = result;
                }
            })
        }
    //}, 500));
});

在Javascript中请求的文档中包含以下内容:

<?php
    $conv_id = $_POST['conv_id'];
    $from_id = $_POST['user_id_loadPN'];

    echo (int)mysql_result(mysql_query("SELECT COUNT(*) FROM `messages` WHERE `group_id` = $chat_id AND `from_id` = $from_id AND `read_on` is NULL"), 0);
?>

我知道很难看清所有这些,但我希望有人可以帮助我...... 我不知道自己做错了什么,但代码不起作用...... 我想这可能是因为for循环,但我不知道,我如何解决这个问题......

如果您有任何疑问,请询问...... 提前谢谢

2 个答案:

答案 0 :(得分:1)

问题是你的循环中有异步。要解决这个问题,你需要一个闭包。你需要将for循环的内容包含在一个以i为参数的函数中,然后在循环中调用该函数。

所以尝试这样的事情:

function doClosure(i) {
    var el = document.getElementById(i),
        conv_id = el.getAttribute("data-conv-id"),
        user_id = el.getAttribute("data-user-id"),
        test = i;

    jQuery.post('./Bauteile/Accounts/loadCounts/loadPNCount.php', {user_id_loadPN: user_id, conv_id: conv_id}, function(result){
        console.log(result);
        console.log(test);

        if(result > 99) {
            result = "99+";
        }

        if(result > 0 || result == "99+") {
            document.getElementById("badge-"+test).innerHTML = result;
        }
    });
}

for (var i = 1; i < document.getElementsByClassName("user").length+1; i++) {
    doClosure(i);
}

答案 1 :(得分:0)

除了我的帖子:

我替换了

jQuery.post('./Bauteile/Accounts/loadCounts/loadPNCount.php', {user_id_loadPN: user_id, conv_id: conv_id}, function(result){

console.log(user_id + " " + i);     
jQuery.post('./Bauteile/Accounts/loadCounts/loadPNCount.php', {user_id_loadPN: user_id, conv_id: conv_id}, function(result){
    console.log(result + " " + i);

用于调试......

控制台输出为:

  • 21 1行:254(=此示例中的第一个console.log)
  • 26 2行:254
  • 27 3行:254
  • 26 4行:256(=本例中为sec.console.log)
  • 27 4行:256
  • 21 4行:256

所以,因为我怀疑For循环和jQuery函数不能很好地协同工作......