jQuery.ajaxTransport( dataType, handler )Возвращает: undefined
Описание: Создаёт объект, обрабатывающий фактическую передачу данных Ajax.
-
версия добавлена: 1.5jQuery.ajaxTransport( dataType, handler )
- dataTypeТип: СтрокаСтрока, определяющая тип данных для использования
- handlerОбработчик, возвращающий новый объект переноса для использования с типом данных, указанным в первом аргументе.
-
Перенос — это объект, предоставляющий два метода, 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
}
});