У меня есть чат, над которым я работаю. И я использовал setInterval для отображения всех сообщений в режиме реального времени каждые 0,5 секунды. Но я заметил, что setInterval зависает и иногда вылетает из браузера. Я слышал, что setTimeout - лучший альтернативный способ использования?

  setInterval(function(){
        $.ajax({
            url: "display_msg.php",
            method: "POST",
            data: {conn:conn},
            success: function(data) {
                $('#chatarea').html(data);
            }
        });
    },500);
-1
phpwev 1 Апр 2017 в 14:21

2 ответа

Лучший ответ

Вам лучше использовать setTimeout, который будет ждать разрешения предыдущего запроса, прежде чем запросить данные снова.

(function pollMessages() {
  $.ajax({
    url: "display_msg.php",
    method: "POST",
    data: {
      conn: conn
    },
    success: function(data) {
      $('#chatarea').html(data);
      setTimeout(pollMessages, 500)
    }
  });
})()
1
synthet1c 1 Апр 2017 в 11:34

Дело в том, что setInterval будет вызывать функцию каждые x миллисекунд, и, поскольку вы отправляете запросы, а серверу требуется некоторое время для ответа, может случиться так, что несколько запросов будут выполняться параллельно, что вызовет некоторые проблемы в вашем приложении. ,

С setTimeout вы можете отправить новый запрос только после завершения предыдущего. Это будет намного лучше. Не забудьте написать код для решения проблем тайм-аута.

Удачи!

1
Useless Code 1 Апр 2017 в 12:10