0

クライアント用のシンプルなチャット モジュールを開発していますが、ループを処理できません。setInterval()

これは、データベースからデータを取得するためのリクエストを送信するjsコードです

function getData(){

    jQuery.ajax({
        url: '../../get_data.php',
        data: 'to=<?php echo $_SESSION['ch_usr_id']; ?>',
        cache: false,
        success: function(data){
            jQuery('<div>'+data+'</div>').appendTo("#ch-data-con");
            setInterval("getData()", 5000);
        }
    });
}

get_data.phpリクエストに応じてデータを生成するファイルは次のとおりです

require "../../support/connection/connect_gib.php";

$to = addslashes(trim($_REQUEST['to']));

$query = "select * from chat where 
          guest_id='".mysql_real_escape_string($to)."' order by id asc";
$result = mysql_query($query);

while( $row = mysql_fetch_assoc($result) ){
    echo "<b>".$row['frm']." : </b> " .$row['message'] . "<br />";
}

すべてのデータが何度も繰り返されるようにループで結果を取得しましたが、新しく更新されたデータが必要です。間違ったことを修正してください..

4

2 に答える 2

1

最後に取得した ID を保持し、それを新しいリクエストに使用する必要があります。サーバー側では、そこから取得する必要があります。

$id= addslashes(trim($_REQUEST['id']));
$query = "select * from chat where 
          guest_id='".mysql_real_escape_string($to)."' AND id > '".mysql_real_escape_string($id)."' order by id asc";

関数 getData(){

jQuery.ajax({
    url: '../../get_data.php',
    data: 'to=<?php echo $_SESSION['ch_usr_id']; ?>&id=' + last_id_fecthed,
    cache: false,
    success: function(data){
        jQuery('<div>'+data+'</div>').appendTo("#ch-data-con");
        setInterval("getData()", 5000);
    }
});

}

于 2012-05-16T06:46:55.203 に答える
1

jQuery で appendTo 関数を使用しています。そのため、すべてのチャット メッセージは古いリストの後に追加されます。.html() 関数を使用して、完全なデータを置き換えることができます。

もう 1 つの方法は、php 側から最後のチャット メッセージのみを取得することです。これにより、すべてのデータが繰り返されなくなります。auto id を使用して、最後にフェッチされるメッセージを指定できます。

于 2012-05-16T06:47:27.500 に答える