Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Пауза в javascript


Рекомендуемые сообщения

Доброго времени суток. Вот пишу чат. Использую PHP+MySQL. На событии body "onload" вызывается фунцкия, осуществляющаа аяксом PHP-запрос к базе.

Вот код функции на java script:

function get_messages(rid) {var url = "[i]адрес_сервера[/i]/chat.php?act=get_messages&rid=" + ridvar a = 1if (a == 1) {	xmlHttp.open("GET", url, true)	xmlHttp.onreadystatechange = updatePage	xmlHttp.send(null)	sleep(1000)}}

(rid - id комнаты, но это неважно). Важно другое. Функция sleep не даёт браузеру зависнуть, но и не повторяет цикл. Подскажите пожалуйста. вопрос вроде примитивный, но поставил меня в тупик. Как сделать так что б каждую секунду выполнялся запрос? Т.е. каждую секунду обновляется список сообщений. Перезагрузка страницы ненужна. Нужно зациклить Ajax-запрос с промежутком времени между повторениями.

Ссылка на комментарий
Поделиться на другие сайты

Во-первых, не понял смысла в строчках:

var a = 1if (a == 1) {

получается проверка условия, которое всегда истино. Вердикт: выкидываем! :)

Во-вторых, если не ошибаюсь, ajax позволяет делать запрос только к серверу, который является домашним для страницы, т.е. если страница загружена с site.com то и ajax на этой странице будет работать только с доменом site.com

По-этому адрес сервера в url указывать не обязательно, для обозначения корня сайта, начните url со слеша

По теме. Возможно использование таймера поможет:

function get_messages(rid) {var url = "/chat.php?act=get_messages&rid=" + ridxmlHttp.open("GET", url, true)xmlHttp.onreadystatechange = updatePagexmlHttp.send(null)setTimeout('get_messages(' + rid + ')', 1000)}

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

Для исправления этого еще раз исправим код. Переменная с комнатой ( rid ) должна быть объявлена вне функции, а не передаваться в параметре:

var rid = 1; //Присваиваем комнату по умолчанию, эту строку лучше поместить в начале скриптаfunction get_messages() { //у функции параметр уже исчезает, она будет работать с внешней переменнойvar url = "/chat.php?act=get_messages&rid=" + ridxmlHttp.open("GET", url, true)xmlHttp.onreadystatechange = updatePagexmlHttp.send(null)setTimeout('get_messages()', 1000)}

P.S. 1 секунда имхо это маловато для перезагрузки чата, Вы получите лишнюю нагрузку, когда пользователь вполне будет удовлетворен загрузкой раз в 3 секунды. А если вообще идеально, время обновления чата должно выбираться пользователем. Пользователи с платным трафиком скажут Вам спасибо за возможность обновления чата раз в 30 сек. и раз в минуту

Изменено пользователем Лорд Дмитрий
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...