ajax推技术,用浏览器访问该网页后,为什么我的代码每次用insert 向数据库插入数据后,当第三次插入数据的时候才会有效果,将$mes显示在浏览器上?
代码如下:
<?PHP
header("content-type:text/html;charset=utf-8");
set_time_limit(0);//设置服务器脚本的最大执行时间。
$conn=mysql_connect('localhost','root','123456');
mysql_query('use test',$conn);
mysql_query('set names utf8',$conn);
echo str_repeat(' ',4500);
echo 'welcome you';
//首先将welcome推送出去。
ob_flush();
flush();
while(true){
$co=mysql_query( "select * from mes where flag=1",$conn);
$row = mysql_fetch_assoc($co);
//echo 'ni';
if(!empty($row)){
echo str_repeat(' ',4500);
//echo'<pre>';
//echo $row['name'];
//echo'</pre>';
$mes = json_encode($row);
//echo "<script type = 'text/javascript'>";
//echo "alert($mes);";
//echo "</script>";
echo 'ni';
$co=mysql_query( "update mes set flag = 0 where id= ".$row['id'],$conn);
ob_flush();//这两行应该放在if语句内部,因为我们检索到有消息后才能推送消息,如果放在if外部,那么每次循环都会推送信息,这样后者会浪费服务器资源。
flush();
}
sleep(1);
}
/*
数据库:
mysql> select *from mes;
+-----+------+------+------+
| id | mes | flag | sign |
+-----+------+------+------+
| 1 | 1 | 0 | 1 |
| 2 | 1 | 0 | 1 |
| 3 | 1 | 0 | 1 |
| 4 | 1 | 0 | 1 |
| 108 | 1 | 0 | 1 |
| 109 | 1 | 0 | 1 |
| 110 | 1 | 0 | 1 |
| 111 | 1 | 0 | 1 |
| 112 | 1 | 0 | 1 |
| 113 | 1 | 0 | 1 |
+-----+------+------+------+
效果:我们每次用mysql> insert into mes (mes,flag,sign) values(1,1,1);
那么该信息会立刻显示在前台浏览器,实现在线服务器端向浏览器推送数据。
建表代码:
| mes | CREATE TABLE mes
(id
int(11) NOT NULL AUTO_INCREMENT,mes
varchar(100) DEFAULT NULL,flag
tinyint(4) DEFAULT '0',sign
tinyint(4) DEFAULT '0',
PRIMARY KEY (id
)
) ENGINE=InnoDB AUTO_INCREMENT=115 DEFAULT CHARSET=utf8 |
*/
?>