Spec-Zone.ru › jQuery

jQuery.ajax()

jQuery.ajax( url [, settings ] )Возвращает: jqXHR

Описание: Выполнение асинхронного HTTP (Ajax) запроса.

  • версия добавлена: 1.5jQuery.ajax( url [, settings ] )

    • url
      Тип: String
      Строка, содержащая URL, к которому отправляется запрос.
    • settings
      Тип: PlainObject
      Набор пар ключ/значение, которые настраивают Ajax-запрос. Все настройки необязательны. Значение по умолчанию для любого параметра может быть установлено с помощью $.ajaxSetup(). Полный список всех параметров см. в jQuery.ajax( settings ) ниже.
  • версия добавлена: 1.0jQuery.ajax( [settings ] )

    • settings
      Тип: PlainObject
      Набор пар ключ/значение, которые настраивают Ajax-запрос. Все настройки необязательны. Значение по умолчанию для любого параметра может быть установлено с помощью $.ajaxSetup().
      • accepts (по умолчанию: depends on dataType)
        Тип: PlainObject
        Набор пар ключ-значение, которые сопоставляют заданный dataType с его типом MIME, который отправляется в Accept заголовке запроса. Этот заголовок сообщает серверу, какой вид ответа он будет принимать в ответ. Например, следующее определяет пользовательский тип mycustomtype для отправки с запросом:
        $.ajax({
          accepts: {
            mycustomtype: 'application/x-some-custom-type'
          },
         
          // Instructions for how to deserialize a `mycustomtype`
          converters: {
            'text mycustomtype': function(result) {
              // Do Stuff
              return newresult;
            }
          },
         
          // Expect a `mycustomtype` back from server
          dataType: 'mycustomtype'
        });
        Примечание: Вам необходимо указать дополнительную запись для этого типа в converters для правильной работы.
      • async (по умолчанию: true)
        Тип: Boolean
        По умолчанию все запросы отправляются асинхронно (т.е. это установлено в true по умолчанию). Если вам нужны синхронные запросы, установите этот параметр в false. Запросы между доменами и dataType: "jsonp" запросы не поддерживают синхронную работу. Обратите внимание, что синхронные запросы могут временно блокировать браузер, отключая любые действия во время активного запроса. С версии jQuery 1.8, использование async: false с jqXHR ($.Deferred) устарело; необходимо использовать параметры обратного вызова success/error/complete вместо соответствующих методов объекта jqXHR, таких как jqXHR.done().
      • beforeSend
        Тип: Функция( jqXHR jqXHR, PlainObject settings )
        Функция обратного вызова перед запросом, которая может использоваться для изменения объекта jqXHR (в jQuery 1.4.x, XMLHTTPRequest) перед его отправкой. Используйте это для установки пользовательских заголовков и т. д. Объекты jqXHR и settings передаются в качестве аргументов. Это событие Ajax. Возвращение false в функции beforeSend отменит запрос. С версии jQuery 1.5, параметр beforeSend будет вызван независимо от типа запроса.
      • cache (по умолчанию: true, false for dataType 'script' and 'jsonp')
        Тип: Boolean
        Если установлено в false, это заставит браузер не кэшировать запрошенные страницы. Примечание: Установка cache в false будет работать корректно только с запросами HEAD и GET. Это работает путем добавления "_={timestamp}" к параметрам GET. Параметр не требуется для других типов запросов, за исключением IE8, когда POST отправляется на URL, уже запрошенный GET.
      • complete
        Тип: Функция( jqXHR jqXHR, String textStatus )
        Функция, которая вызывается по завершении запроса (после выполнения обратных вызовов success и error). Функция получает два аргумента: объект jqXHR (в jQuery 1.4.x, XMLHTTPRequest) и строку, классифицирующую состояние запроса ("success", "notmodified", "nocontent", "error", "timeout", "abort", или "parsererror"). С версии jQuery 1.5, параметр complete может принимать массив функций. Каждая функция будет вызываться по очереди. Это событие Ajax.
      • contents
        Тип: PlainObject
        Объект пар строка/регулярное выражение, которые определяют, как jQuery будет анализировать ответ, учитывая его тип содержимого. (версия добавлена: 1.5)
      • contentType (по умолчанию: 'application/x-www-form-urlencoded; charset=UTF-8')
        Тип: Boolean или String
        При отправке данных на сервер используйте этот тип содержимого. По умолчанию это "application/x-www-form-urlencoded; charset=UTF-8", что подходит для большинства случаев. Если вы явно передаете тип содержимого в $.ajax(), то он всегда отправляется на сервер (даже если данные не отправляются). С версии jQuery 1.6 вы можете передать false чтобы указать jQuery не устанавливать заголовок типа содержимого. Примечание: Спецификация W3C XMLHttpRequest предписывает, что кодировка всегда UTF-8; указание другой кодировки не заставит браузер изменить кодировку. Примечание: Для междоменных запросов установка типа содержимого на что-либо кроме application/x-www-form-urlencoded, multipart/form-data, или text/plain заставит браузер отправить предварительный запрос OPTIONS на сервер.
      • context
        Тип: PlainObject
        Этот объект будет контекстом всех обратных вызовов, связанных с Ajax. По умолчанию контекстом является объект, представляющий настройки Ajax, используемые в вызове ($.ajaxSettings объединенный с настройками, переданными в $.ajax). Например, указание элемента DOM в качестве контекста сделает его контекстом для обратного вызова complete запроса, как показано здесь:
        $.ajax({
          url: "test.html",
          context: document.body
        }).done(function() {
          $( this ).addClass( "done" );
        });
      • converters (по умолчанию: {"* text": window.String, "text html": true, "text json": jQuery.parseJSON, "text xml": jQuery.parseXML})
        Тип: PlainObject
        Объект, содержащий преобразователи типов данных dataType в dataType. Значение каждого преобразователя — функция, которая возвращает преобразованное значение ответа. (версия добавлена: 1.5)
      • crossDomain (по умолчанию: false for same-domain requests, true for cross-domain requests)
        Тип: Boolean
        Если вы хотите принудительно выполнить междоменный запрос (например, JSONP) в том же домене, установите значение crossDomain в true. Это позволяет, например, перенаправить сервер на другой домен. (версия добавлена: 1.5)
      • data
        Тип: PlainObject или String или Array

        Данные, которые будут отправлены на сервер. Если HTTP-метод не может иметь тело сущности, например GET, то data добавляется к URL.

        Когда data является объектом, jQuery генерирует строку данных из пар ключ-значение объекта, если параметр processData не установлен в false. Например, { a: "bc", d: "e,f" } преобразуется в строку "a=bc&d=e%2Cf". Если значение является массивом, jQuery сериализует несколько значений с одинаковым ключом на основе значения параметра traditional (описано ниже). Например, { a: [1,2] } преобразуется в строку "a%5B%5D=1&a%5B%5D=2" с настройкой traditional: false по умолчанию.

        Когда data передаётся в виде строки, оно должно быть заранее закодировано с использованием правильной кодировки для contentType, которая по умолчанию является application/x-www-form-urlencoded.

        В запросах с dataType: "json" или dataType: "jsonp", если строка содержит двойной вопросительный знак (??) где-либо в URL или одиночный вопросительный знак (?) в строке запроса, он заменяется значением, сгенерированным jQuery, уникальным для каждой копии библиотеки на странице (например, jQuery21406515378922229067_1479880736745).

      • dataFilter
        Тип: Функция( String data, String type ) => Anything
        Функция для обработки необработанных данных ответа XMLHttpRequest. Это функция предварительного фильтрации для очистки ответа. Вы должны вернуть очищенные данные. Функция принимает два аргумента: необработанные данные, возвращённые сервером, и параметр 'dataType'.
      • dataType (по умолчанию: Intelligent Guess (xml, json, script, or html))
        Тип: String
        Тип данных, который вы ожидаете получить от сервера. Если он не указан, jQuery попытается определить его на основе типа MIME ответа (MIME-тип XML даст XML, в 1.4 JSON даст JavaScript-объект, в 1.4 скрипт выполнит скрипт, а всё остальное вернётся как строка). Доступные типы (и результат, переданный в качестве первого аргумента вашему обработающему успешный результат вызову) таковы:
        • "xml": Возвращает документ XML, который можно обработать с помощью jQuery.
        • "html": Возвращает HTML как обычный текст; встроенные теги скрипта выполняются при вставке в DOM.
        • "script": Выполняет ответ как JavaScript и возвращает его как обычный текст. Отключает кэширование путём добавления параметра строки запроса _=[TIMESTAMP] к URL, если параметр cache не установлен в true. Примечание: Это превратит POST в GET для запросов с удалённого домена. До jQuery 3.5.0, неудачные HTTP ответы со скриптом Content-Type всё ещё выполнялись.
        • "json": Выполняет ответ как JSON и возвращает JavaScript-объект. Междоменные "json" запросы с плацехолдером обратного вызова, например ?callback=?, выполняются с помощью JSONP, если запрос не включает jsonp: false в своих параметрах запроса. Данные JSON анализируются строго; любой неправильный JSON отклоняется, и генерируется ошибка анализа. С версии jQuery 1.9, пустой ответ также отклоняется; сервер должен вернуть ответ null или {} вместо него. (См. json.org для получения дополнительной информации о правильном формате JSON.)
        • "jsonp": Загружает блок JSON с помощью JSONP. Добавляет дополнительный "?callback=?" в конец вашего URL для указания обратного вызова. Отключает кэширование путём добавления параметра строки запроса "_=[TIMESTAMP]" к URL, если параметр cache не установлен в true.
        • "text": Обычная строка текста.
        • несколько значений, разделённых пробелом: С версии jQuery 1.5, jQuery может преобразовать dataType из того, что он получил в заголовке Content-Type, в то, что вам нужно. Например, если вы хотите, чтобы текстовый ответ интерпретировался как XML, используйте "text xml" для dataType. Вы также можете сделать запрос JSONP, получить его как текст и интерпретировать его jQuery как XML: "jsonp text xml". Аналогично, короткая строка, такая как "jsonp xml" сначала попытается преобразовать из jsonp в xml, и, если это не удастся, преобразовать из jsonp в текст, а затем из текста в xml.
      • ошибка
        Тип: Функция( jqXHR jqXHR, Строка textStatus, Строка errorThrown )
        Функция, вызываемая при ошибке запроса. Функция получает три аргумента: объект jqXHR (в jQuery 1.4.x, XMLHttpRequest), строку, описывающую тип ошибки, и необязательный объект исключения, если он произошёл. Возможные значения для второго аргумента (кроме null) — "timeout", "error", "abort", и "parsererror". При возникновении HTTP-ошибки, errorThrown получает текстовую часть HTTP-статуса, например, "Not Found" или "Internal Server Error." (в HTTP/2 это может быть пустая строка) Начиная с jQuery 1.5, настройка error может принимать массив функций. Каждая функция будет вызвана по очереди. Примечание: Этот обработчик не вызывается для запросов с разных доменов и JSONP-запросов с разных доменов. Это событие Ajax-событие.
      • глобальный (по умолчанию: true)
        Тип: Булево
        Вызывать ли глобальные обработчики Ajax-событий для этого запроса. По умолчанию — true. Установите в false, чтобы предотвратить срабатывание глобальных обработчиков, таких как ajaxStart или ajaxStop. Это позволяет управлять различными Ajax-событиями.
      • заголовки (по умолчанию: {})
        Тип: Объект
        Объект дополнительных пар ключ/значение заголовков для отправки вместе с запросами, использующими транспорт XMLHttpRequest. Заголовок X-Requested-With: XMLHttpRequest всегда добавляется, но его значение по умолчанию XMLHttpRequest может быть изменено здесь. Значения в настройке headers также можно перезаписать внутри функции beforeSend. (версия добавлена: 1.5)
      • еслиИзменён (по умолчанию: false)
        Тип: Булево
        Разрешить успешное выполнение запроса только если ответ изменился с момента последнего запроса. Это делается путём проверки заголовка Last-Modified. Значение по умолчанию — false, игнорируя заголовок. В jQuery 1.4 этот метод также проверяет «etag», указанный сервером, для обнаружения неизменённых данных.
      • локальный (по умолчанию: depends on current location protocol)
        Тип: Булево
        Разрешить текущей среде распознаваться как «локальная» (например, файловая система), даже если jQuery по умолчанию не распознаёт её как таковую. Следующие протоколы в настоящее время распознаются как локальные: file, *-extension, и widget. Если нужно изменить настройку isLocal, рекомендуется сделать это один раз в методе $.ajaxSetup(). (версия добавлена: 1.5.1)
      • jsonp
        Тип: Строка или Булево
        Переопределить имя функции обратного вызова в запросе JSONP. Это значение будет использовано вместо 'callback' в части 'callback=?' строки запроса в URL. Так, {jsonp:'onJSONPLoad'} приведет к 'onJSONPLoad=?' , переданной на сервер. Начиная с jQuery 1.5, установка jsonp в false предотвращает добавление jQuery строки "?callback" в URL или попытку использования "=?" для преобразования. В этом случае вы должны явно установить настройку jsonpCallback. Например, { jsonp: false, jsonpCallback: "callbackName" }. Если вы не доверяете целевому ресурсу ваших Ajax-запросов, по соображениям безопасности установите свойство jsonp в false.
      • jsonpCallback
        Тип: Строка или Функция()
        Укажите имя функции обратного вызова для запроса JSONP. Это значение будет использовано вместо случайного имени, автоматически сгенерированного jQuery. Предпочтительно, чтобы jQuery генерировал уникальное имя, поскольку это упростит управление запросами и обеспечит обработку обратных вызовов и ошибок. Вы можете указать имя функции обратного вызова, когда хотите улучшить кэширование GET-запросов в браузере. Начиная с jQuery 1.5, вы также можете использовать функцию для этой настройки, в этом случае значение jsonpCallback устанавливается в возвращаемое значение этой функции.
      • метод (по умолчанию: 'GET')
        Тип: Строка
        HTTP-метод для запроса (например, "POST", "GET", "PUT"). (версия добавлена: 1.9)
      • mimeType
        Тип: Строка
        Тип MIME для переопределения типа MIME XHR. (версия добавлена: 1.5.1)
      • пароль
        Тип: Строка
        Пароль, используемый с XMLHttpRequest в ответ на запрос HTTP-аутентификации.
      • обрабатыватьДанные (по умолчанию: true)
        Тип: Булево
        По умолчанию данные, переданные в настройку data в виде объекта (технически, всё, что не строка), будут обработаны и преобразованы в строку запроса, соответствующую типу содержимого по умолчанию "application/x-www-form-urlencoded". Если нужно отправить DOMDocument или другие необработанные данные, установите эту настройку в false.
      • scriptAttrs
        Тип: Объект
        Определяет объект с дополнительными атрибутами, используемыми в запросах "script" или "jsonp". Ключ представляет имя атрибута, а значение — значение атрибута. Если этот объект предоставлен, он принудительно использует транспорт "script-tag". Например, это можно использовать для установки атрибутов nonce, integrity, или crossorigin для удовлетворения требований Content Security Policy. (версия добавлена: 3.4)
      • scriptCharset
        Тип: Строка
        Применяется только при использовании транспорта "script". Устанавливает атрибут charset тега script, используемого в запросе. Используется, когда кодировка символов на локальной странице отличается от кодировки символов на удалённом скрипте. В качестве альтернативы, атрибут charset можно указать в scriptAttrs, что также гарантирует использование транспорта "script".
      • statusCode (по умолчанию: {})
        Тип: Объект

        Объект числовых HTTP-кодов и функций, вызываемых, когда ответ имеет соответствующий код. Например, следующее выведет alert при статусе ответа 404:

        $.ajax({
          statusCode: {
            404: function() {
              alert( "page not found" );
            }
          }
        });

        Если запрос успешен, функции с кодом статуса принимают те же параметры, что и функция обратного вызова успеха; если запрос приводит к ошибке (включая перенаправление 3xx), они принимают те же параметры, что и функция обратного вызова error.

        (версия добавлена: 1.5)
      • успех
        Тип: Функция( Любое data, Строка textStatus, jqXHR jqXHR )
        Функция, вызываемая при успешном запросе. Функция получает три аргумента: данные, возвращённые сервером, отформатированные в соответствии с параметром dataType или функцией обратного вызова dataFilter, если она указана; строку, описывающую статус; и объект jqXHR (в jQuery 1.4.x, XMLHttpRequest). Начиная с jQuery 1.5, настройка «успех» может принимать массив функций. Каждая функция будет вызвана по очереди. Это Ajax-событие.
      • таймаут
        Тип: Число
        Устанавливает таймаут (в миллисекундах) для запроса. Значение 0 означает отсутствие таймаута. Это переопределит любой глобальный таймаут, установленный с помощью $.ajaxSetup(). Период таймаута начинается с момента вызова $.ajax ; если несколько запросов находятся в процессе и у браузера нет доступных соединений, запрос может истечь, прежде чем он будет отправлен. В jQuery 1.4.x и ниже, объект XMLHttpRequest будет в некорректном состоянии, если запрос истечет; доступ к любым членам объекта может вызвать исключение. Только в Firefox 3.0+, скриптовые и JSONP-запросы не могут быть отменены таймаутом; скрипт будет выполняться, даже если он придёт после истечения таймаута.
      • традиционный
        Тип: Булево
        Установите в true если вы хотите использовать традиционный стиль сериализации param.
      • тип (по умолчанию: 'GET')
        Тип: Строка
        Псевдоним для method. Вы должны использовать type если используете версии jQuery до 1.9.0.
      • url (по умолчанию: The current page)
        Тип: Строка
        Строка, содержащая URL, к которому отправляется запрос.
      • имя пользователя
        Тип: Строка
        Имя пользователя, используемое с XMLHttpRequest в ответ на запрос HTTP-аутентификации.
      • xhr (по умолчанию: ActiveXObject when available (IE), the XMLHttpRequest otherwise)
        Тип: Функция()
        Функция обратного вызова для создания объекта XMLHttpRequest. По умолчанию используется ActiveXObject (IE), в противном случае — XMLHttpRequest. Переопределите, чтобы предоставить собственную реализацию XMLHttpRequest или улучшения фабрики.
      • xhrFields
        Тип: PlainObject

        Объект пар имя-значение для установки в нативном объекте XHR. Например, вы можете использовать его для установки withCredentials в true для запросов между доменами, если это необходимо.

        $.ajax({
           url: a_cross_domain_url,
           xhrFields: {
              withCredentials: true
           }
        });

        В jQuery 1.5 свойство withCredentials не передавалось в нативный объект XHR, и поэтому запросы CORS, требующие его, игнорировали этот флаг. По этой причине рекомендуется использовать jQuery 1.5.1+ в случае необходимости его использования.

        (версия добавлена: 1.5.1)

Функция $.ajax() лежит в основе всех запросов Ajax, отправляемых jQuery. Часто нет необходимости вызывать эту функцию напрямую, так как доступны несколько альтернатив более высокого уровня, таких как $.get() и .load(), которые проще в использовании. Однако, если требуются менее распространенные варианты, $.ajax() можно использовать более гибко.

В простейшем случае функцию $.ajax() можно вызвать без аргументов:

$.ajax();

Примечание: Значения по умолчанию можно установить глобально с помощью функции $.ajaxSetup().

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

Объект jqXHR

Объект jQuery XMLHttpRequest (jqXHR), возвращаемый функцией $.ajax() с версии jQuery 1.5, является супермножеством родного объекта XMLHttpRequest браузера. Например, он содержит свойства responseText и responseXML, а также метод getResponseHeader(). Когда механизм передачи данных отличается от XMLHttpRequest (например, тег скрипта для запроса JSONP), объект jqXHR имитирует функциональность родного XHR по возможности.

С версии jQuery 1.5.1 объект jqXHR также содержит метод overrideMimeType() (он был доступен и в jQuery 1.4.x, но временно удалён в jQuery 1.5). Метод .overrideMimeType() может быть использован в функции обратного вызова beforeSend(), например, для изменения заголовка типа содержимого ответа:

$.ajax({
  url: "https://fiddle.jshell.net/favicon.png",
  beforeSend: function( xhr ) {
    xhr.overrideMimeType( "text/plain; charset=x-user-defined" );
  }
})
  .done(function( data ) {
    if ( console && console.log ) {
      console.log( "Sample of data:", data.slice( 0, 100 ) );
    }
  });

Объекты jqXHR, возвращаемые функцией $.ajax() с версии jQuery 1.5, реализуют интерфейс Promise, предоставляя все свойства, методы и поведение Promise (см. Объект Deferred для получения дополнительной информации). Эти методы принимают один или несколько аргументов-функций, которые вызываются при завершении запроса $.ajax(). Это позволяет назначать несколько функций обратного вызова для одного запроса и даже после того, как запрос может быть выполнен. (Если запрос уже завершён, функция обратного вызова вызывается немедленно.) Доступные методы Promise объекта jqXHR включают:

  • jqXHR.done(function( data, textStatus, jqXHR ) {});

    Альтернативный конструкт к опции success callback, см. deferred.done() для деталей реализации.

  • jqXHR.fail(function( jqXHR, textStatus, errorThrown ) {});

    Альтернативный конструкт к опции error callback, метод .fail() заменяет устаревший метод .error(). См. deferred.fail() для деталей реализации.

  • jqXHR.always(function( data|jqXHR, textStatus, jqXHR|errorThrown ) { }); (добавлено в jQuery 1.6)

    Альтернативный конструкт к опции complete callback, метод .always() заменяет устаревший метод .complete().

    В ответ на успешный запрос аргументами функции являются те же, что и у .done(): данные, статус, и объект jqXHR. Для неудачных запросов аргументами являются те же, что и у .fail(): объект jqXHR, статус и ошибка. См. deferred.always() для деталей реализации.

  • jqXHR.then(function( data, textStatus, jqXHR ) {}, function( jqXHR, textStatus, errorThrown ) {});

    Объединяет функциональность методов .done() и .fail(), позволяя (с jQuery 1.8) управлять базовым Promise. См. deferred.then() для деталей реализации.

Предупреждение об устаревании: Функции обратного вызова jqXHR.success(), jqXHR.error(), и jqXHR.complete() удалены с версии jQuery 3.0. Используйте jqXHR.done(), jqXHR.fail(), и jqXHR.always() вместо них.

// Assign handlers immediately after making the request,
// and remember the jqXHR object for this request
var jqxhr = $.ajax( "example.php" )
  .done(function() {
    alert( "success" );
  })
  .fail(function() {
    alert( "error" );
  })
  .always(function() {
    alert( "complete" );
  });
 
// Perform other work here ...
 
// Set another completion function for the request above
jqxhr.always(function() {
  alert( "second complete" );
});

Ссылка this во всех функциях обратного вызова — это объект в опции context переданной в $.ajax в настройках; если context не указано, this — ссылка на сами настройки Ajax.

Для обратной совместимости с XMLHttpRequest, объект jqXHR будет предоставлять следующие свойства и методы:

  • readyState
  • responseXML и/или responseText когда базовый запрос ответил xml и/или текстом соответственно
  • status
  • statusText (может быть пустой строкой в HTTP/2)
  • abort( [ statusText ] )
  • getAllResponseHeaders() как строка
  • getResponseHeader( name )
  • overrideMimeType( mimeType )
  • setRequestHeader( name, value ) которая отклоняется от стандарта, заменяя старое значение новым, а не конкатенируя новое к старому
  • statusCode( callbacksByStatusCode )

Однако механизм onreadystatechange не предусмотрен, так как done, fail, always, и statusCode покрывают все возможные требования.

Очереди функций обратного вызова

Опции beforeSend, error, dataFilter, success и complete все принимают функции обратного вызова, которые вызываются в соответствующее время.

С версии jQuery 1.5, функции обратного вызова fail и done, и с jQuery 1.6, always управляются в очередях FIFO, что позволяет иметь более одной функции обратного вызова для каждого хука. Смотрите методы объекта Deferred, которые реализуются внутри для этих $.ajax() хуков обратного вызова.

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

  1. Опция обратного вызова beforeSend вызывается; она получает объект jqXHR и объект settings в качестве параметров.
  2. Опция обратного вызова error вызывается, если запрос завершился неудачей. Она получает jqXHR, строку, указывающую тип ошибки, и объект исключения, если применимо. Некоторые встроенные ошибки будут содержать строку в качестве объекта исключения: "abort", "timeout", "No Transport".
  3. Опция обратного вызова dataFilter вызывается немедленно после успешного получения данных ответа. Она получает возвращённые данные и значение dataType, и должна вернуть (возможно изменённые) данные для передачи в success.
  4. Опция обратного вызова success вызывается, если запрос завершился успешно. Она получает возвращённые данные, строку, содержащую код успеха, и объект jqXHR.
  5. Функции обратного вызова Promise — .done(), .fail(), .always(), и .then() — вызываются в порядке их регистрации.
  6. Опция обратного вызова complete срабатывает, когда запрос завершается, независимо от того, успешен он или нет. Она получает объект jqXHR, а также строку, содержащую код успеха или ошибки.

Типы данных

Разные типы ответов на вызов $.ajax() подвергаются различным видам предварительной обработки перед передачей обработчику успеха. Тип предварительной обработки зависит по умолчанию от заголовка Content-Type ответа, но может быть явно задан с помощью опции dataType. Если указана опция dataType, заголовок Content-Type ответа будет проигнорирован.

Доступные типы данных: text, html, xml, json, jsonp, и script.

Если text или html указаны, предварительная обработка не выполняется. Данные просто передаются обработчику успеха и доступны через свойство responseText объекта jqXHR.

Если указан xml, ответ анализируется с помощью jQuery.parseXML перед передачей, как XMLDocument, обработчику успеха. XML-документ доступен через свойство responseXML объекта jqXHR.

Если указан json, ответ анализируется с помощью jQuery.parseJSON перед передачей, как объект, обработчику успеха. Анализированный объект JSON доступен через свойство responseJSON объекта jqXHR.

Если указан script, $.ajax() выполнит JavaScript, полученный с сервера, перед передачей его обработчику успеха в виде строки.

Если указан jsonp, $.ajax() автоматически добавит параметр запроса (по умолчанию) callback=? к URL. Свойства jsonp и jsonpCallback настроек, переданных в $.ajax(), могут быть использованы для указания имени параметра запроса и имени функции обратного вызова JSONP соответственно. Сервер должен вернуть корректный JavaScript, передающий JSON-ответ в функцию обратного вызова. $.ajax() выполнит возвращённый JavaScript, вызвав функцию обратного вызова JSONP, прежде чем передать JSON-объект, содержащийся в ответе, обработчику успеха $.ajax().

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

Отправка данных на сервер

По умолчанию запросы Ajax отправляются с помощью HTTP-метода GET. Если требуется метод POST, метод можно указать, задав значение для опции type. Эта опция влияет на то, как содержимое опции data отправляется на сервер. Данные POST всегда передаются на сервер с кодировкой UTF-8, в соответствии со стандартом W3C XMLHTTPRequest.

Опция data может содержать строку запроса в формате key1=value1&key2=value2, или объект в формате {key1: 'value1', key2: 'value2'}. Если используется последняя форма, данные преобразуются в строку запроса с помощью jQuery.param() перед отправкой. Эту обработку можно обойти, установив processData в false. Обработка может быть нежелательной, если вы хотите отправить объект XML на сервер; в этом случае измените опцию contentType с application/x-www-form-urlencoded на более подходящий тип MIME.

Дополнительные опции

Опция global предотвращает срабатывание обработчиков, зарегистрированных для событий ajaxSend, ajaxError и аналогичных, когда данный запрос их бы активировал. Это может быть полезно, например, для подавления индикатора загрузки, реализованного с помощью обработчика ajaxSend, если запросы частые и кратковременные. При запросах скриптов и JSONP через разные домены глобальная опция автоматически устанавливается в значение false. Подробнее см. описания этих методов ниже.

Если сервер выполняет аутентификацию HTTP перед предоставлением ответа, имя пользователя и пароль могут быть отправлены с помощью опций username и password.

Запросы Ajax имеют временные ограничения, поэтому ошибки могут быть перехвачены и обработаны для улучшения пользовательского опыта. Таймауты запросов обычно оставляются по умолчанию или устанавливаются по умолчанию глобально с помощью $.ajaxSetup(), а не переопределяются для конкретных запросов с помощью опции timeout.

По умолчанию запросы всегда выполняются, но браузер может использовать результаты из кэша. Чтобы запретить использование кэшированных результатов, установите cache в значение false. Чтобы заставить запрос сообщить об ошибке, если ресурс не был изменён с момента последнего запроса, установите ifModified в значение true.

Опция scriptCharset позволяет явно указать кодировку символов для запросов, использующих тег <script> (то есть тип script или jsonp). Это полезно, если у скрипта и страницы-хоста разные кодировки символов.

Первая буква в Ajax означает "асинхронный", что означает, что операция происходит параллельно, и порядок завершения не гарантируется. Опция async для $.ajax() по умолчанию установлена в true, что указывает на то, что выполнение кода может продолжиться после отправки запроса. Сильно не рекомендуется устанавливать эту опцию в значение false (и тем самым делать вызов не асинхронным), так как это может привести к зависанию браузера.

Функция $.ajax() возвращает объект XMLHttpRequest, который она создаёт. Обычно jQuery обрабатывает создание этого объекта внутри, но можно указать пользовательскую функцию для его создания с помощью опции xhr. Возвращённый объект, как правило, можно отбросить, но он предоставляет интерфейс более низкого уровня для наблюдения и управления запросом. В частности, вызов .abort() для объекта остановит запрос перед его завершением.

Расширение Ajax

Начиная с jQuery 1.5, реализация Ajax в jQuery включает префильтры, префильтры, транспорты и преобразователи, которые позволяют гибко расширять Ajax.

Использование преобразователей

Преобразователи $.ajax() поддерживают отображение типов данных на другие типы данных. Однако если вы хотите отобразить пользовательский тип данных на известный тип (например json), вам необходимо добавить соответствие между Content-Type ответа и фактическим типом данных, используя опцию contents:

$.ajaxSetup({
  contents: {
    mycustomtype: /mycustomtype/
  },
  converters: {
    "mycustomtype json": function( result ) {
      // Do stuff
      return newresult;
    }
  }
});

Этот дополнительный объект необходим, потому что типы Content-Type ответа и типы данных никогда не имеют строгого взаимно-однозначного соответствия (отсюда и регулярное выражение).

Чтобы преобразовать из поддерживаемого типа (например text, json) в пользовательский тип данных и обратно, используйте другой преобразователь прямого прохода:

$.ajaxSetup({
  contents: {
    mycustomtype: /mycustomtype/
  },
  converters: {
    "text mycustomtype": true,
    "mycustomtype json": function( result ) {
      // Do stuff
      return newresult;
    }
  }
});

Вышеприведённый код теперь позволяет передавать данные из text в mycustomtype и затем mycustomtype в json.

Дополнительные примечания:

  • Из-за ограничений безопасности браузера большинство запросов "Ajax" подчиняются политике одинакового происхождения; запрос не может успешно извлечь данные с другого домена, поддомена, порта или протокола.
  • Запросы скриптов и JSONP не подчиняются ограничениям политики одинакового происхождения.

Примеры:

Сохраните данные на сервере и уведомите пользователя о завершении.

$.ajax({
  method: "POST",
  url: "some.php",
  data: { name: "John", location: "Boston" }
})
  .done(function( msg ) {
    alert( "Data Saved: " + msg );
  });

Получите последнюю версию HTML-страницы.

$.ajax({
  url: "test.html",
  cache: false
})
  .done(function( html ) {
    $( "#results" ).append( html );
  });

Отправьте XML-документ в качестве данных на сервер. Установив опцию processData в false, предотвращается автоматическое преобразование данных в строки.

var xmlDocument = [create xml document];
var xmlRequest = $.ajax({
  url: "page.php",
  processData: false,
  data: xmlDocument
});
 
xmlRequest.done( handleResponse );

Отправьте идентификатор в качестве данных на сервер, сохраните данные на сервере и уведомите пользователя о завершении. Если запрос завершится неудачно, отобразите уведомление пользователю.

var menuId = $( "ul.nav" ).first().attr( "id" );
var request = $.ajax({
  url: "script.php",
  method: "POST",
  data: { id : menuId },
  dataType: "html"
});
 
request.done(function( msg ) {
  $( "#log" ).html( msg );
});
 
request.fail(function( jqXHR, textStatus ) {
  alert( "Request failed: " + textStatus );
});

Загрузите и выполните файл JavaScript.

$.ajax({
  method: "GET",
  url: "test.js",
  dataType: "script"
});

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

Spec-Zone.ru

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