我有一个问题: 我试图在我的网站上创建一个个人消息系统,对于这个我的想法是,用户在每个聊天中显示新消息的数量...... 与此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循环,但我不知道,我如何解决这个问题......
如果您有任何疑问,请询问...... 提前谢谢
答案 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);
用于调试......
控制台输出为:
所以,因为我怀疑For循环和jQuery函数不能很好地协同工作......