JackShcherbakov
@JackShcherbakov

Как правильно составить и ответить на длинные опрос?

Здравствуйте! Пытаюсь сделать длинный опрос. То есть я хочу сделать так, что бы клиент не посылал очередной запрос до того, как не прешел ответ с сервера. В моем случае ответы должны приходить раз в минуту. Вот так выглядит код php:
<?php
$date = new DateTime();
$minutes = $date->format("i");
if($minutes%2 == 0){
	print "Сервер отправил запрос";
}
?>

Вот js:
function subscribe(url) {
  var xhr = new XMLHttpRequest();

  xhr.onreadystatechange = function() {
    if (this.readyState != 4) return;

    if (this.status == 200) {
      console.log(this.responseText);
    } else {
       console.log(this);
    }

    subscribe(url);
  }
  xhr.open("GET", url, true);
  xhr.send();
}
subscribe("http://comet/php.php")

В итоге несколько раз в секунду в консоль выстреливается несколько десяток сообщений, аналогичных этому:
XHR finished loading: GET "http://comet/php.php"
Судя по всему у меня сервер все время шлет ответы. Но как мне сделать так, что бы сервер отправлял ответы только если количество текущих минут делится на 2 без остатка? Как сделать все правильно? Или проблема в js? Заранее спасибо!
  • Вопрос задан
  • 138 просмотров
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега PHP
Учим yii: https://youtu.be/-WRMlGHLgRg
php тут лишнее, вся Ваша задача должна реализовываться в js. Вариантов масса, самый очевидный ставить disabled на кнопку и по таймауту, а может и по наличию ответа от сервера или еще хрен знает какой логики, снимать disabled и давать возможность делать отправку снова.
А Ваш js просто хренячит запросы на сервер, как только получил от него ответ. Фактически цикл.

Судя по всему у меня сервер все время шлет ответы.

Так не бывает, ответы не шлются, это результат запроса. Нет запроса, нет ответа. Вы посылаете из js запросы не останавливаясь, надо это прекратить.
Ответ написан
Ваш ответ на вопрос

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

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