В апреле 1965 года ДНИ совместно с клиникой св.Мунго провел закрытую конференцию, тема которой была предложена руководителем ДНИ, кавалером ордена Мерлиновой Бороды доктором Тяпляпом И. Готовингсом "Почему администраторы форумов быстро теряют вкус к написанию "Новостей" своих проектов". В ходе прений гений Незаконных Изобретений пришел к коллективному выводу, что причина этого - крайнее неудобство и нудность редактирования и добавления указанных материалов. Перед сотрудниками ДНИ была поставлена задача найти незаконное решение вопроса, которая и была ими решена совершенно незаконным путем.
Предложенное решение было опубликовано в виде брошюры "Ajax: в больницу св. Мунго своим ходом" (цена у добросовестных распространителей 20 сиклей). Ниже предлагается реферат этой брошюры.
* * *
Мы не будем вдаваться в детали Ajax. Все, что нам нужно знать о нем для нашей задачи - это самую суть. Суть же такова: Ajax - это всего лишь возможность получить данные от сервера в любой момент времени, а сервером может быть все, что угодно колдующему, лишь бы лежало на том же домене, что и скрипт с Ajax (это важное ограничение!).
То есть, у вас есть html-файлик, который выводит на экран "Привет" - и это сервер (правда, функционал его крайне ограничен - как к нему ни обращайся, в ответ получаешь неизменный "Привет"). Понятно, что такое сервер Ajax? Это что угодно, лишь бы оно содержало что-то, выводимое на экран.
Ваш форум что-то выводит на экран? Естественно. Поэтому к любой его станице можно обратиться из Ajax, как к серверу. Вывод напрашивается сам: создаем тему "Новости", пишем в нее посты с новостями - а Ajax будет нам эти посты выводить на главной странице, прямо как будто мы их подгружаем с настоящего сервера.
Я вижу зреющий вопрос: но что же такое САМ Ajax? Для нас (раз мы решили не углубляться в детали) - сущая ерунда. Это объект javascript
var xmlHttp = new XMLHttpRequest();
Правда, в таком виде он будет работать только в Firefox и GoogleChrome, но усложнить себе жизнь мы всегда успеем.
Итак, раз наш xmlHttp - объект, у него есть свойства и методы. Какие из них нам нужны? Немногие. Они поместятся в 2 функции: отправки и приема данных. А именно:
Отправка запроса, который вернет нам страницу форума:
Code
function callAjax(url)
{
xmlHttp.open("GET", url, true);
xmlHttp.onreadystatechange = responseAjax;
xmlHttp.send(null);
return true;
}
Прием ответа (текста страницы)
Code
function responseAjax()
{
if (xmlHttp.readyState == 4)
{
if ( xmlHttp.status == 200 )
{
parcer(xmlHttp.responseText);
}
}
return true;
}
Первую процедуру примите на веру, а вторую очень легко сформулировать словами: "ЕСЛИ xmlHttp.readyState = 4 И xmlHttp.status = 200 ТО выполнить процедуру parcer(xmlHttp.responseText).
Процедуру parcer нам предстоит написать, а xmlHttp.responseText - это и есть текст нашей страницы форума, который получил Ajax. Оцените красоту игры: две совсем маленькие процедурки, и вы получили свою страницу в виде текстовой переменной javascript. Это же просто сказка барда Бидля какая-то!
(продолжение следует)