Задать вопрос
@arcanrun

Почему в Comet (Long-Polling) данные не приходят моментально?

У меня не получается сразу получать новые данные - они приходят только после нового выполнения функции getmess, которая выполняется по истечению таймера, в чем может быть ошибка?

function getmess(){
$.ajax({
url:"get_mess.php",
type:"POST",
data:{"id":id},
cahce:false,
timeout:30000,
async:true,
success:function(result){
$("#response").html(result);
setTimeout('getmess()',10000);
}
});
}

на сервере:

while(true){
$a=$_POST["id"];
$find_mess=(mysql_query("SELECT * FROM saymon WHERE id> '$a' "));
if (mysql_num_rows($find_mess)) {
while($row=mysql_fetch_array($find_mess)){
echo $row['mess']."";
}

flush();
exit;
}

sleep(5);
}
mysql_close();
  • Вопрос задан
  • 3078 просмотров
Подписаться 3 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 4
@codercat
Ну так у вас sleep(5) же, как они придут моментально? :\
Ответ написан
@himik
а где getmess вызывается первый раз?
Ответ написан
@olegmar
Ну так у вас setTimeout стоит с интервалом в 10 сек + еще sleep 5 сек, конечно данные не будут приходить моментально.
Ответ написан
@mayorovp
Зря вы setTimeout используете для повторного запроса - лучше используйте $.ajax({...}).always(getmess)

В таком случае повторные запросы будут возникать при успехе старого - или при его тайм-ауте, и не надо следить за магическими константами.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы