Spec-Zone.ru › jQuery

jQuery.ajaxTransport()

jQuery.ajaxTransport( dataType, handler )Возвращает: undefined

Описание: Создаёт объект, обрабатывающий фактическую передачу данных Ajax.

  • версия добавлена: 1.5jQuery.ajaxTransport( dataType, handler )

    • dataType
      Тип: Строка
      Строка, определяющая тип данных для использования
    • handler
      Тип: Функция( Объект options, Объект originalOptions, jqXHR jqXHR )
      Обработчик, возвращающий новый объект переноса для использования с типом данных, указанным в первом аргументе.

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

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

Фабрики переноса регистрируются с помощью $.ajaxTransport(). Типичная регистрация выглядит так:

$.ajaxTransport( dataType, function( options, originalOptions, jqXHR ) {
  if( /* transportCanHandleRequest */ ) {
    return {
      send: function( headers, completeCallback ) {
        // Send code
      },
      abort: function() {
        // Abort code
      }
    };
  }
});

где:

  • options — параметры запроса
  • originalOptions — параметры, предоставленные методу $.ajax(), не изменённые и, следовательно, без значений по умолчанию из ajaxSettings
  • jqXHR — объект jqXHR запроса
  • headers — объект (ключ-значение) заголовков запроса, которые перенос может передать, если он их поддерживает
  • completeCallback — обратный вызов, используемый для уведомления Ajax о завершении запроса

completeCallback имеет следующую сигнатуру:

function( status, statusText, responses, headers ) {}

где:

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

Так же, как и префильтры, фабрика переноса может быть прикреплена к определённому типу данных:

$.ajaxTransport( "script", function( options, originalOptions, jqXHR ) {
  // Will only be called for script requests
});

Следующий пример демонстрирует, как можно реализовать минимальный перенос изображений:

$.ajaxTransport( "image", function( s ) {
  if ( s.type === "GET" && s.async ) {
    var image;
    return {
      send: function( _ , callback ) {
        image = new Image();
        function done( status ) {
          if ( image ) {
            var statusText = ( status === 200 ) ? "success" : "error",
              tmp = image;
            image = image.onreadystatechange = image.onerror = image.onload = null;
            callback( status, statusText, { image: tmp } );
          }
        }
        image.onreadystatechange = image.onload = function() {
          done( 200 );
        };
        image.onerror = function() {
          done( 404 );
        };
        image.src = s.url;
      },
      abort: function() {
        if ( image ) {
          image = image.onreadystatechange = image.onerror = image.onload = null;
        }
      }
    };
  }
});

Обработка пользовательских типов данных

Реализация jQuery Ajax поставляется с набором стандартных типов данных, таких как text, json, xml и html.

Используйте опцию converters в $.ajaxSetup() для расширения или изменения стратегий преобразования типов данных, используемых $.ajax().

Сам нескомпилированный исходный код jQuery включает список преобразователей по умолчанию, что эффективно демонстрирует, как они могут быть использованы:

// List of data converters
// 1) Key format is "source_type destination_type"
//    (a single space in-between)
// 2) The catchall symbol "*" can be used for source_type
converters: {
  // Convert anything to text
  "* text": window.String,
  // Text to html (true = no transformation)
  "text html": true,
  // Evaluate text as a json expression
  "text json": jQuery.parseJSON,
  // Parse text as xml
  "text xml": jQuery.parseXML
}

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

Например, исходный код jQuery использует $.ajaxSetup() для добавления преобразователя для "text script":

jQuery.ajaxSetup({
  accepts: {
    script: "text/javascript, application/javascript"
  },
  contents: {
    script: /javascript/
  },
  converters: {
    "text script": jQuery.globalEval
  }
});

© The jQuery Foundation and other contributors
Licensed under the MIT License.
https://api.jquery.com/jQuery.ajaxTransport

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API