Создание объекта, определяющего способ передачи данных через ajax-запрос

jQuery.ajaxTransport() — обрабатывает пользовательские настройки Ajax запроса или изменяет существующие настройки перед каждой отправкой запроса через $.ajax().

  • dataTypes — название типа данных, который будет использоваться.м;
  • handler(options, originalOptions, jqXHR) — обработчик, который будет возвращать новый объект транспортировки с данными в первом аргументе.
    • options настройки текущего запроса;
    • originalOptions настройки по умолчанию (из ajaxSettings);
    • jqXHR объект jqXHR (в версиях до jquery-1.5, вместо него использовался XMLHttpRequest)

jQuery.ajaxTransport() представляет собой объект с двумя методами: send и abort, которые используются в методе $.ajax(). Данную настройку нужно использовать в крайнем случае, а так же только если предварительная фильтрация и преобразования являются недостаточными для достижения нужного эффекта.

Поскольку каждый запрос работает с своим собственным объектом транспорта, его нельзя задать напрямую. Вместо этого, вам нужно создать функцию, которая вернёт новый объект транспорта.

Генераторы транспорта регистрируются с помощью метода $.ajaxTransport(). Пример:

где:

  • headers — объект (ключ/значение) для указания заголовков запроса, для передачи transport-объектом, если есть поддержка.;
  • completeCallback — функция обратного вызова, используется для уведомления AJAX о завершении запроса.

completeCallback имеет следующий синтаксис:

где:

  • status — статус HTTP-кода ответа, как например 200 для успешного запроса или 404 в случае, если ресурс не найден;
  • statusText — строка, параметр statusText из ответа;
  • responses — необязательный параметр, объект, содержащий dataType/value, который содержит ответ по всех форматах, который может обеспечить transport-объект (например, собственный XMLHttpRequest-объект будет установлен  в {xml: XMLData, text: textData} для ответа содержащий XML-документ);
  • headers — необязательный параметр, строка, содержащая все заголовки ответа, если transport имеет к ним доступ (схоже с XMLHttpRequest.getAllResponseHeaders())

Как и в случае использования jQuery.ajaxPrefilter(), jQuery.ajaxTransport() можно прикрепить к конкретному типу данных (dataType):

Пример реализации минимальными средствами транспорта изображения:

Взаимодействие с собственными типами данных

В реализация AJAX в jQuery имеется набор стандартных типов данных, таких как text, JSON, XML и HTML. Используйте параметр converters в jQuery.ajaxSetup(), чтобы дополнить или изменить метод обработки типа данных , используемых в jQuery.ajax().

Взглянув на стандартные правила конвертации, вы сможете понять как настроить свои:

Когда вы указываете параметр converters глобально в jQuery.ajaxSetup() или для каждого вызова jQuery.ajax(), объект будет вызываться конверторами по умолчанию, заменив те, которые переопределены и оставив остальные не тронутыми.

Например в исходниках jQuery используется jQeury.ajaxSetup(), что бы добавить конвертор «text script».

 

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *