XAKEPok Posted October 5, 2009 Report Share Posted October 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-запрос с промежутком времени между повторениями. Link to comment Share on other sites More sharing options...
Ф@РТОВЫЙ Posted October 5, 2009 Report Share Posted October 5, 2009 (edited) Во-первых, не понял смысла в строчках: 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 сек. и раз в минуту Edited October 5, 2009 by Лорд Дмитрий Link to comment Share on other sites More sharing options...
XAKEPok Posted October 5, 2009 Author Report Share Posted October 5, 2009 Лорд Дмитрий, огромное спасибо! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now