1

簡単に言えば、次のようにメニュー内のラベルに未読メッセージの数を表示したい:

 <li><a id="2" style="background-image:url('menu icons/comments.png'); background-repeat: no-repeat; background-position: left; background-position-x: 5px;"
                       href= "viewMessages.php">Messages<label id="num_msg">(<?php echo $count; ?>)</a></li>

私が得る場所$count

$num_messages = mysql_query("SELECT COUNT(m.message_id) as cnt FROM messages m INNER JOIN member_message_member mmm ON (m.message_id = mmm.message_id)
                    WHERE mmm.member_id2 = $id AND m.seen = 0") or die(mysql_error());
                    $Mcount = mysql_fetch_assoc($num_messages);
                    $count = $Mcount['cnt'];

ユーザーがメッセージをクリックすると、次のようになります。

 $("#sub a").click(function(){
                    mesg_id = $(this).attr('msg_id');
                    page = $(this).attr('href')
                    id = $(this).attr('mID');
                    $.ajax ({
                            data: {message_id:mesg_id},
                            type: 'POST',
                            url:  'Seen_messages.php',
                            success: function(response) {
                                if (response == 1) {

                                } else {
                                    alert(response);
                                }
                            }
                        });
                });

Seen_messages.php:

@mysql_connect("localhost", "root", "") or die(mysql_error());
    mysql_select_db("mydb") or die(mysql_error());
    $message_id = $_POST['message_id'];
   mysql_query("UPDATE `messages` SET `messages`.`seen` = TRUE WHERE message_id={$message_id}") or die (mysql_error());
   echo "1";

ページを更新して更新する必要があることを除いて、すべてが正常に機能しています$count。手動で更新せずにラベル内の変数を更新する方法はありますか?

4

2 に答える 2

3

alwaysSeen_messages.phpではなく、更新された未読数で1応答し、その応答を使用してユーザー インターフェイスを更新します。

// ...
success: function(response) {
   if (isNaN(response)) {
       alert('Error!');
   } else {
       $('#num_msg').text(response);
   }
}
于 2012-07-01T22:43:34.120 に答える
1

setInterval()サーバーで新しいメッセージを常にチェックし、<label>jQueryを使用してカウントを更新するために使用する関数を作成してはどうでしょうか。(ところで、あなたのラベルには終了タグがありません!)。

function get_msg_count(){
    $.ajax ({
        data: {}, // not really needed
        type: 'POST',
        url:  'get_msg_count.php', // page to return your msg count
        success: function(response) {
            // update the label with the count
            // response would be the number returned from PHP
            $('#num_msg').html(response); 
            }
        }); // End $.ajax
} // End Function

// and on DOM ready
$(function(){
    // check for new messages every 3 seconds(3000ms)
    setInterval(get_msg_count(), 3000) 
});

次に、サーバーサイドスクリプトはメッセージカウントを返し、カウントを保持するラベルを更新するだけです。

于 2012-07-01T22:51:43.610 に答える