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

Пауза в 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 сек. и раз в минуту

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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

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

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