2012-01-27 25 views
2

上記のタイトルについてアドバイスが必要です。私が期待していることに動作していない新しいレコードがデータベースphp-jqueryに追加されたときの通知

setInterval(function(){  
    $.ajax({ 
     type : "POST", 
     url : "file.php", 
     success : function(response){ 
      alert(response); 
     } 
    }); 
},1000); 

PHP:

$sql = "SELECT * FROM i_case"; 
$qry = pg_query($connection, $sql); 
$res = pg_num_rows($qry); 

$sql_1 = "SELECT * FROM i_case"; 
$qry_1 = pg_query($connection, $sql_1); 
$res_1 = pg_num_rows($qry_1); 

do { 
    echo "new record on i_case"; 
} while($res != $res_1 and !(usleep(10000))); 

jQueryの私は、次のコードを持っています。

コードのどこに問題があるのですか?

+0

どのような例外がありますか?わかりません? –

+0

レスポンスはi_caseの新しいレコード –

+0

ですが、テーブルに新しいレコードはありません...エラーはありません!私は 'error:function(){alert(" ERROR "); } ' –

答えて

5

ほとんどの場合、$res$res_1と同じであるため、ループが1回実行されません。ループが実行されると、それは恐ろしい無限ループです。

あなたがするべきことは以下のようです。

のjavascript:

var old_count = 0; 

setInterval(function(){  
    $.ajax({ 
     type : "POST", 
     url : "file.php", 
     success : function(data){ 
      if (data > old_count) { 
       alert('new record on i_case'); 
       old_count = data; 
      } 
     } 
    }); 
},1000); 

そしてPHPコード:

$sql = "SELECT count(*) as count FROM i_case"; 
$qry = pg_query($connection, $sql); 
$row = pg_fetch_assoc($qry); 
echo $row['count']; 
+0

偉大な兄弟!!!! –

+0

しかし、私はページを更新すると、最後の通知が何度も何度も何度も表示されますか? –

+0

@jinまず、最初のレコード数をロードするだけでなく、0に設定することもできます。 – xdazz

1

はあなたがDBに接続している確認しましたか?

私は平均が$connectionです。変数はtrueを返します。データベースに接続するPHPのコードが見つかりませんでした。

あなたがサーバー側からどのような応答を得ているかを知ることができれば、私はもう少しお手伝いできます。

+1

はい、接続が接続されています。 –

2

あなたの全体のアプローチはうまくいかないと思います。私は、カウントを生成するPHPとそれが変更されているかどうかを確認するJSをお勧めします。

$sql = "SELECT * FROM i_case"; 
$qry = pg_query($connection, $sql); 
$res = pg_num_rows($qry); 
echo $res; 

とJSで、あなたはこのようにsomesthing行うことができます:

var count_cases = -1; 
setInterval(function(){  
    $.ajax({ 
     type : "POST", 
     url : "file.php", 
     success : function(response){ 
      if (count_cases != -1 && count_cases != response) alert('new record on i_case'); 
      count_cases = response; 
     } 
    }); 
},1000); 
+0

したがって、-1からcount_casesを呼び出します。 –

+0

'-1'は、関数の最初の実行で' alert'を防ぐためのinit値です。 1回目の実行後、 'count_cases'が-letのsay-50で開始され、PHPが数値を返すとすぐにアラートがトリガーされます: – DerVO

+1

btw:完全な' SELECT'を行を数えるだけでは非常に効率が悪いです。 xdazzの答え – DerVO

2

答えをxdazzには少し微調整。ページを読み込むときに初めてアラートが表示されないようにする。

JSコード:

var old_count = 0; 
var i = 0; 
setInterval(function(){  
$.ajax({ 
    type : "POST", 
    url : "notify.php", 
    success : function(data){ 
     if (data > old_count) { if (i == 0){old_count = data;} 
      else{ 
      alert('New Enquiry!'); 
      old_count = data;} 
     } i=1; 
    } 
}); 
},1000); 

PHPコード:

include("config.php"); 
$sql = "SELECT count(*) as count FROM Enquiry"; 
$qry = mysqli_query($db, $sql); 
$row = mysqli_fetch_assoc($qry); 
echo $row['count']; 

P.S.私の最初のStackoverflowの答え。

+0

コードを説明できますか? {if(i == 0){old_count = data;} else { アラート( '新しいお問い合わせ!'); old_count = data;} } i = 1; – usertest

関連する問題