СТАТЬИ
Поехали!
Сейчас подробно будет рассмотрен алгоритм проведения опроса и протокол взаимодействия клиента и сервера. Итак, после загрузки основной страницы, средствами JavaScript выполняется GET-запрос без параметров к серверу для получения исходных данных для проведения опроса. Сервер возвращает их в виде XML документа следующей структуры: Легко заметить, что сервер передает на клиентскую часть приложения вопрос и варианты ответа на него.На клиенте происходит обработка полученной информации и вывод ее на страницу. После того, как пользователь выберет один из вариантов ответа, выполняется еще один запрос GET к серверу. Но на этот раз, в качестве параметра передается индекс выбранного пользователем варианта ответа. Сервер сохраняет выбор пользователя и возвращает новый XML-документ, который содержит статистику ответов: В этом документе появилась информация о том, сколько процентов опрошенных выбрало тот или иной вариант ответа, и сколько всего человек приняло участие в опросе. Клиентской части приложения остается только вывести полученные данные на страницу.
Реализация
Сразу приведу ссылку на конечный результат: опрос. Хочу подчеркнуть, что у меня не было задачи сделать универсальный скрипт для проведения опросов. Если вы захотите использовать приведенный ниже код, то вам придется его модифицировать для того, чтобы он соответствовал вашим потребностям. Данный пример имеет минимум функциональности, но этого достаточно для иллюстрации применения AJAX для опроса пользователей сайта.Код серверной части рассматриваемого примера я приводить не буду. Да он и не важен. Скажу только, что на самом деле он не сохраняет результаты опроса, а генерирует их случайным образом. Уверен, что вам не составит труда реализовать серверный скрипт, возвращающий простые XML-документы, и сохраняющий результаты опроса в базе данных или в файле на сервере.
Теперь переходим к клиентской части. Вот исходный код страницы в текстовом формате: poll.txt. Если вас смущают незнакомые теги (которые значимой роли не играют), то можете просто просмотреть HTML код работающего примера.
Область страницы, на которой будет осуществляться вывод данных в ходе опроса, определяется тегом div, который имеет id="poll". Я не буду останавливаться на служебных функциях, которые возвращают экземпляр класса XMLHttpRequest и осуществляют с помощью него асинхронный запрос GET к серверу. Эти функции были описаны в предыдущей статье. Рассмотрим новый код:
//выполняет обработку xml-документа, полученного с сервера. Если при получении данных с сервера не ошибок не возникло (т.е. httpRequester.status=200), то получить их можно с помощью свойства responseXML объекта класса XMLHttpRequest. При этом они уже трактуются не как текст, а как объект XML DOM. После того, как данные получены, они передаются процедуре processXmlResponse, которая вызывает процедуру подготовки опроса или вывода результата в зависимости от того, первый это был вызов или второй. Рассмотрим процедуру initPoll:

