Технология AJAX. Запрос к серверу

Алгоритм запроса к серверу выглядит так:

  • Проверка существования XMLHttpRequest.
  • Инициализация соединения с сервером.
  • Посылка запрса серверу.
  • Обработка полученных данных.

Для создания запроса к серверу создадим небольшую функцию, которая будет по функциональности объединять в себе функции для GET и POST запросов.
/*

Функция посылки запроса к файлу на сервере

r_method  — тип запроса: GET или POST

r_path    — путь к файлу

r_args    — аргументы вида a=1&b=2&c=3…

r_handler — функция-обработчик ответа от сервера

*/

function SendRequest(r_method, r_path, r_args, r_handler)

{

    //Создаём запрос

    var Request = CreateRequest();

    //Проверяем существование запроса еще раз

    if (!Request)

    {

        return;

    }

    //Назначаем пользовательский обработчик

    Request.onreadystatechange = function()

    {

        //Если обмен данными завершен

        if (Request.readyState == 4)

        {

            //Передаем управление обработчику пользователя

            r_handler(Request);

        }

    }

    //Проверяем, если требуется сделать GET-запрос

    if (r_method.toLowerCase() == «get» && r_args.length > 0)

    r_path += «?» + r_args;

    //Инициализируем соединение

    Request.open(r_method, r_path, true);

    if (r_method.toLowerCase() == «post»)

    {

        //Если это POST-запрос

        //Устанавливаем заголовок

        Request.setRequestHeader(«Content-Type»,»application/x-www-form-urlencoded; charset=utf-8″);

        //Посылаем запрос

        Request.send(r_args);

    }

    else

    {

        //Если это GET-запрос

        //Посылаем нуль-запрос

        Request.send(null);

    }

}

Создавать запрос стало намного проще. Для примера напишем функцию, которая будет получать содержимое файла на сервере и выводить его в контейнер.

function ReadFile(filename, container)

{

    //Создаем функцию обработчик

    var Handler = function(Request)

    {

        document.getElementById(container).innerHTML = Request.responseText;

    }

    //Отправляем запрос

    SendRequest(«GET»,filename,»»,Handler);

}

Именно таким образом происходит взаимодействие с сервером.

Обработка ответа

В предыдущем примере мы сделали функцию запроса к серверу. Но она, по сути, небезопасна, так как мы не обрабатываем состояния объекта и состояния ответа от сервера.
Дополним наш код, чтобы он смог выводить визуальное оповещение о процессе загрузки.

Request.onreadystatechange = function()

{

    //Если обмен данными завершен

    if (Request.readyState == 4)

    {

        //Передаем управление обработчику пользователя

        r_handler(Request);

    }

    else

    {

        //Оповещаем пользователя о загрузке

    }

}

Как вы уже знаете, объект XMLHttpRequest позволяет узнать статус ответа от сервера. Воспользуемся этой возможностью.

Request.onreadystatechange = function()

{

    //Если обмен данными завершен

    if (Request.readyState == 4)

    {

        if (Request.status == 200)

        {

            //Передаем управление обработчику пользователя

            r_handler(Request);

        }

        else

        {

            //Оповещаем пользователя о произошедшей ошибке

        }

    }

    else

    {

        //Оповещаем пользователя о загрузке

    }

}


Варианты ответа от сервера


От сервера можно получить данные нескольких видов:

  • Обычный текст
  • XML
  • JSON

Если вы получаете обычный текст, то вы можете сразу же направить его в контейнер, то есть на вывод. При получении данных в виде XML вы должны обработать данные с помощью DOM-функций, и представить результат с помощью HTML.

JSON — это объектная нотация Javascript. С ее помощью можно представить объект в виде строки (здесь можно привести аналогию с функцией сериализации). При получении JSON-данных вы должны выполнить их, чтобы получить полноценный объект Javascript и произвести с ним необходимые операции. Помните, что такая передача данных и выполнение их не являются безопасными. Вы должны следить за тем, что поступает на исполнение.

Пример кода JSON:

{

«data»:

{

    «misc»:

    [

        {

            «name» : «JSON-элемент один»,

            «type» : «Подзаголовок 1»

        },

        {

            «name» : «JSON-элемент два»,

            «type» : «Подзаголовок 2»

        }

    ]

}

}

При получении такого кода, производим следующее действие:


var responsedata = eval(«(» + Request.responseText + «)»)


После выполнения данного кода вам будет доступен объект responsedata.

Работа с серверными языками программирования

Такая работа ничем не отличается от обычной. Для примеров я возьму PHP в качестве серверного языка. В клиентской части ничего не изменилось, но серверная часть теперь представлена PHP-файлом.

По традиции, начнем с приветствия нашему замечательному миру:

    echo «Hello, World!»;

При обращении к этому файлу клиенту вернется строка Hello, World. Как вы понимаете, это представляет широчайшие возможности для построения приложений. На основе передачи аргументов при вызове сервера с помощью XMLHttpRequest можно сделать параметризацию вывода, тем самым обеспечив обширную функциональность Web-приложения.

Помимо PHP, можно использовать любой другой серверный язык программирования.

Оставить комментарий

avatar
  Подписаться  
Уведомление о