我有一个奇怪的问题,我正在进行长时间轮询以检查MySQL表中是否有新内容出现,一切正常,我会在表中出现消息时立即收到消息。但问题是当我试图重新加载我的页面时(F5)我必须等到服务器端功能完成然后我的页面刷新。
例如我的长轮询开始和我在执行的第一秒刷新页面,我必须等待29秒才能刷新页面。
有谁知道最近发生了什么?
提前致谢!
这是代码
PHP
public function longPolling() {
if (isset($_POST['timestamp'])) {
$timestamp = $_POST['timestamp'];
}
$end = time() + 20;
while (time() <= $end) {
$data = $this->db->select("SELECT id, status, error, start, end, ackby FROM event WHERE start > '$timestamp'", 0);
if ($data) {
echo json_encode(array('status' => 1, 'timestamp' => date('Y-m-d H:i:s')));
break;
}
usleep(25000);
}
}
JS
function startPoll(timestamp) {
$.ajax({
url: 'dashboard/longPolling',
type: 'POST',
dataType: 'json',
timeout: 30000,
cache: false,
data: {
timestamp: timestamp
},
success: function(data) {
if (data != null && data.status == 1) {
oTable.fnReloadAjax();
timestamp = data.timestamp;
}
setTimeout(function(){
startPoll(timestamp);
}, 100)
}
});
}
P.S。 ignore_user_abort
已停用。