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 Лорд Дмитрий, огромное спасибо! Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.