我正在尝试与ajax,jquery,php和mysql进行基于长轮询的聊天,但是似乎有些错误(也是我对长轮询的新手)。
index.php:
<?php include 'db.php'; $result = mysql_query("SELECT id FROM chatpoll ORDER BY id DESC LIMIT 1"); while($row = mysql_fetch_array($result)) { $old_msg_id = $row['id']; } ?> <html> <head> <script src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript" charset="utf-8"> var old_msg_id = <?php echo $old_msg_id; ?>; function waitForMsg(){ $.ajax({ type: "GET", url: "poll.php?old_msg_id=" + old_msg_id, async: true, cache: false, success: function(data){ var json = eval('(' + data + ')'); if(json['msg'] != "") { alert("New msg added to base!"); } old_msg_id = json['old_msg_id']; setTimeout('waitForMsg()',1000); }, error: function(XMLHttpRequest, textStatus, errorThrown){ alert("error: " + textStatus + " (" + errorThrown + ")"); setTimeout('waitForMsg()',15000); } }); } $(document).ready(function(){ waitForMsg(); }); function load(old_msg_id) //part of code which i'm not using yet { $.get('getmsg.php?last_msg_id='+ old_msg_id, function(data){ $('#chat').append(data); }, 'html'); } </script> </head> <body> <div id="chat"> </div> </body> </html>
和poll.php
<?php include 'db.php'; $old_msg_id = $_GET['old_msg_id']; $result = mysql_query("SELECT id FROM chatpoll ORDER BY id DESC LIMIT 1"); while($row = mysql_fetch_array($result)) { $last_msg_id = $row['id']; } while($old_msg_id >= $last_msg_id) { usleep(1000); clearstatcache(); $old_msg_id = $last_msg_id; } $response = array(); $response['msg'] = 'new'; $response['old_msg_id'] = $old_msg_id; echo json_encode($response); ?>
它在index.php和poll.php中均未显示任何错误,但是当我插入ID大于old_msg_id的数据时,没有任何反应。
将您的poll.php文件中的代码更改为以下内容:
<?php include 'db.php'; $old_msg_id = $_GET['old_msg_id']; $result = mysql_query("SELECT id FROM chatpoll ORDER BY id DESC LIMIT 1"); while($row = mysql_fetch_array($result)) { $last_msg_id = $row['id']; } while($last_msg_id <= $old_msg_id) { usleep(1000); clearstatcache(); $result = mysql_query("SELECT id FROM chatpoll ORDER BY id DESC LIMIT 1"); while($row = mysql_fetch_array($result)) { $last_msg_id = $row['id']; } } $response = array(); $response['msg'] = 'new'; $response['old_msg_id'] = $last_msg_id; echo json_encode($response); ?>