4

これについて検索する方法がわからないので、ちょっと迷っています (ここで見た 2 つのトピックは閉じられていました)。

ニュース Web サイトを運営しており、データベースに新しいデータが挿入されたときにユーザーに警告したいと考えています。ページをリロードせずに警告される StackOverflow のように、またはリロードせずに新しいメッセージ/通知について警告される facebook のようにしたいです。

それを行う最良の方法はどれですか?データベースを常にチェックしているタイムアウトのあるある種のリスナーですか?それは効率的ではないように聞こえます...

前もって感謝します。

4

1 に答える 1

3

常にチェックするには、javascriptajaxとjsonおよびコールバック関数が必要です。プッシュサービスで実行できますが、PHPはそれが悪く、websockestなどが必要です。facebookはタイムアウト呼び出しを使用します。スタックオーバーフローがわからない

   refreshInterval = 500
  refreshTimeout = setTimeout( getNotificationCounts, refreshInterval );
function getNotifications() {
        $.ajax({
            url : 'path_to_your_php',
            type : 'POST',
                    data:   //put for exampel user_id but it cvan be handled by sesion as well
            dataType : 'json',
            success : function(data) {
                alert('You have'+ data.total +' new messages')
                refreshTimeout = setTimeout( getNotificationCounts, refreshInterval ); //this will check every half of second
            }
        });
    }

次に、PHPでは、たとえば、データベースにフラグがあり、データがdatabseにとって新しいかどうかをチェックします。フォーマットに注意し、適切なSQLエスケープする

    $result=mysql_query("SELECT count(*) as total from myTable where user_id=$_POST['user_id'] AND is_read=0"); 

      //note instad of $_POST you can use session if users are logged in, or however you are handling it
        $data=mysql_fetch_assoc($result);
        echo json_encode($data)

;

その後、ユーザーがメッセージをクリックするとメッセージを既読としてマークする別のajax呼び出しを作成できます。またはダイアログリストまたはwahteverを開きます

mysql_query("UPDATE myTable WHERE user_id=$_POST['user_id'] SET  is_read=1");
于 2012-12-02T11:02:49.253 に答える