XAKEPok Опубликовано 5 октября, 2009 Жалоба Поделиться Опубликовано 5 октября, 2009 Доброго времени суток. Вот пишу чат. Использую 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-запрос с промежутком времени между повторениями. Ссылка на комментарий Поделиться на другие сайты Поделиться
Ф@РТОВЫЙ Опубликовано 5 октября, 2009 Жалоба Поделиться Опубликовано 5 октября, 2009 (изменено) Во-первых, не понял смысла в строчках: 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 сек. и раз в минуту Изменено 5 октября, 2009 пользователем Лорд Дмитрий Ссылка на комментарий Поделиться на другие сайты Поделиться
XAKEPok Опубликовано 5 октября, 2009 Автор Жалоба Поделиться Опубликовано 5 октября, 2009 Лорд Дмитрий, огромное спасибо! Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти