Содержание:
jQuery.ajax( url [, settings ] )Возвращает: jqXHR
Описание: Выполняет асинхронный HTTP (Ajax) запрос.
-
Добавлен в версии: 1.5jQuery.ajax( url [, settings ] )
-
urlТип: StringСтрока, содержащая адрес URL, к которому направляется запрос.
-
settingsТип: PlainObjectАссоциативный массив для конфигурации Ajax запроса. Все настройки не обязательные к заполнению (опциональны). Значения по умолчанию могут быть установлены при помощи метод $.ajaxSetup(). Ниже приведен полный список всех настроек.
-
-
Добавлен в версии: 1.0jQuery.ajax( [settings ] )
-
settingsТип: PlainObjectАссоциативный массив для конфигурации Ajax запроса. Все настройки не обязательные к заполнению (опциональны). Значения по умолчанию могут быть установлены при помощи метод $.ajaxSetup().
-
accepts (значение по умолчанию:
зависит от dataType
)Тип: PlainObjectАссоциативный массив отображающий заданныйdataType
его типу MIME, который отправляется полемAccept
в заголовке HTTP запроса. Этот заголовок сообщает серверу какой формат ответа будет принят. Например, следующий пользовательский тип данныхmycustomtype
будет отправлен в запросе:12345678910111213141516$.ajax({
accepts: {
mycustomtype: 'application/x-some-custom-type'
},
// Инструкции кк десериализовать тип данных `mycustomtype`
converters: {
'text mycustomtype': function(result) {
// Как то преобразуем
return newresult;
}
},
// Ожидаем от сервера тип данных `mycustomtype`
dataType: 'mycustomtype'
});
converters
для корректной обработки Ajax ответа. -
async (значение по умолчанию:
true
)Тип: BooleanПо умолчанию, все зпросы отпрвляются асинхронно (т.е. это значение установленное вtrue
по умолчанию). Если Вам нужен синхронный запрос, установите значение параметраfalse
. Кросс-доменные иdataType: "jsonp"
запросы не поддерживают синхронные операции. Обратите внимние, что синхронные запросы могут временно блокировать браузер или приостанавливать какие то активные операции в моменты выполнения запроса. Начиная с jQuery 1.8, использованиеasync: false
с jqXHR ($.Deferred
) не рекомендуется; Вы должны использовать обработчикиsuccess
/error
/complete
вместо соотвествующих методов объекта jqXHR, таких какjqXHR.done()
. -
beforeSendОбработчик вызываемый перед совершения запроса, в котором Вы можете модицифировать объект jqXHR (В версиях jQuery 1.4.x и ниже, XMLHTTPRequest) перед тем как Ajax запрос будет отправлен. Использовать пользовательские заголовки и т.д. The jqXHR and settings objects are passed as arguments. This is an Ajax Event. Returning
false
in thebeforeSend
function will cancel the request. As of jQuery 1.5, thebeforeSend
option will be called regardless of the type of request. -
cache (значение по умолчанию:
true, false для dataType 'script' и 'jsonp'
)Тип: BooleanЕсли устновлено значениеfalse
, то принудительно запрошенные страницы не будут закешированы браузером. Важно: Значениеfalse
параметраcache
будет корректно работать только с запросами HEAD и GET. Это работает путем добавления "_={timestamp}" к адресу GET запроса. Этот параметр не нужендля других типов запросов, исключая случай с IE8 когда POST запрос осуществляется к тому же адресу URL к которому уже выполнялся GET запрос. -
completeФункция которая вызывается когда запрос завершается (после того как
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'
)Когда отправляются данные на сервер, используется этот тип контентаContent-Type
. Значение по умолчанию "application/x-www-form-urlencoded; charset=UTF-8", которое прекрасно подходит для большинства случаев. Если Вы явно передаете content-type в метод$.ajax()
, то он всегда будет отправлен на сервер (даже если никакие данные не будут отправлены на сервер). Начиная с jQuery 1.6 Вы можете указать значениfalse
чтобы jQuery не передавал в заголовке полеContent-Type
совсем. Важно: Стандарт W3C XMLHttpRequest specification предписывает всегда использовать кодировку UTF-8; указание другой кодировки не вынудит браузер изменить кодировку. Важно: Для кросс-доменных запросов, установка тип контента в значение отличающегося отapplication/x-www-form-urlencoded
,multipart/form-data
илиtext/plain
вынудит браузер отправить подготовительный OPTIONS запрос на сервер. -
contextТип: PlainObjectЭто объект будет контекстом для всех обработчиков этого Ajax запроса. По умолчанию контекстом является объект представляющий Ajax настройки используемые при вызове (
$.ajaxSettings
объединеные с настройками переданными в$.ajax
). Например, указав DOM элемент как контекст сделает его контекстом в обработчике запросаcomplete
:123456$.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-to-dataType конверторы. Значение каждого конвертора является функцией которая возвращает трансформированное значение ответа. (Добавлено в версии: 1.5) -
crossDomain (значение по умолчанию:
false для запросов к тому же домену, true для кросс-доменных запросов
)Тип: BooleanЕсли Вы хотите выполнить запрос к тому же домену вынужденно как кросс-доменный (например JSONP), установите значение вtrue
. Это позволяет, например, вернуть от сервера редирект н другой домен. (Добавлено в версии: 1.5) -
dataДанные отправляемые на сервер. Они будут преобразованы в строку, если еще не являются строкой. Для GET запроса эта строка будет добавлена к URL адресу. Смотрите праметр
processData
для предотвращения этой автоматической обработки. Объект должен быть ассоциативным массивом (пары ключ/значение). Если значение является массивом, то jQuery сериализирует значения массива с тем же самым ключем на основе значения параметраtraditional
(описан ниже). -
dataFilterФункция используемая для обработки исходных данных от XMLHttpRequest. Это предварительная функция для проверки и чистки данных ответа. Вы должны вернуть очищенные данные. Функция принимает два аргумента: исходные данные отданные сервером и значение параметра
dataType
. -
dataType (значение по умолчанию:
Общеиспользуемые типы (xml, json, script, или html)
)Тип: StringТип данных которые Вы ожидаете от сервера. Если не указан, то jQuery будет пытаться определить его на базе типа MIME ответа (типxml
MIME даст XML, в 1.4json
даст JavaScript объект, в 1.4script
будет выполнен как скрипт и все прочее будет возвращено как строка). Возможные типы (и результат передается в качестве первого аргумента в обработчик запросаsuccess
):-
"xml"
: Возвращает XML документ, который может быть обработан при помощи jQuery. -
"html"
: Возвращает HTML как простой текст; включенные тэги скриптов будет выполнены когда этот HTML будет вставлен в DOM. -
"script"
: Вычисляет ответ как JavaScript и возвращает его как простой текст. Отключает кэширование запроса (путем добавление параметра_=[TIMESTAMP]
к URL адресу) даже если значение параметраcache
равноtrue
. Важно: Это превратит POST в GET для for запросов к удаленным доменам. -
"json"
: Вычисляет ответ как JSON и возвращает JavaScript объект. Кросс-доменный"json"
запрос конвертируются в"jsonp"
если в параметрах запроса не указаноjsonp: false
. Данные в формате JSON обрабатываются в строгом порядке; любой нарушения формата будет отклонено и будет выброшена ошибка синтаксического анализа. Начиная с jQuery 1.9, пустой запрос также будет отклонен; сервер должен вернуть ответnull
или{}
. -
"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.
-
-
errorФункция вызывается если запрос закончится ошибкой. Функция принимает три аргумента: объект jqXHR (в jQuery 1.4.x, XMLHttpRequest), строка описывающая тип произошедшей ошибки и необязательный объект исключения, если он был вызван. Возможные значения второго аргумента (кроме
null
):"timeout"
,"error"
,"abort"
и"parsererror"
. При возникновении HTTP ошибки, аргументerrorThrown
примет текстовую часть HTTP статуса, такие как "Not Found" или "Internal Server Error." Начиная с jQuery 1.5, параметрerror
может принять массив функций. Каждая функция будет вызвана в своем порядке. Важно: Этот обработчик не вызывается для кросс-доменных скриптовых и кросс-доменных JSONP запросов. Являетсяе Ajax событием. -
global (значение по умолчанию:
true
)Тип: BooleanПараметр регулирует вызывать ли глобальные Ajax события для этого запроса. По умолчанию значение равноtrue
. Установка значения вfalse
предотвратит вызов таких глобальных обработчиков какajaxStart
илиajaxStop
. Это можно использовать для управления различными Ajax событиями. -
headers (значение по умолчанию:
{}
)Тип: PlainObjectОбъект с дополнительными полями заголовка HTTP запроса для отправки через XMLHttpRequest. ЗаголовокX-Requested-With: XMLHttpRequest
добавляется всегда, но его значение по умоланиюXMLHttpRequest
можно изменить через этот параметр. Значения вheaders
также может быть переписаны в функцииbeforeSend
. (добавлен в версии: 1.5) -
ifModified (значение по умолчанию:
false
)Тип: BooleanРазрешает запросу быть успешным только если ответ изменился с момента последнего запроса. Это делается путем проверки поля заголовкаLast-Modified
. Значение по умолчаниюfalse
, игнорирует поля заголовка HTTP запроса. В jQuery 1.4 и ниже этот алгоритм также проверяет поле заголовка ответа 'etag' указанное сервером, что найти неизменненные данные. -
isLocal (значение по умолчанию:
зависит от текущего локального протокола
)Тип: BooleanРазрешает текущему окружение как "локальное" (например файловая система), даже если jQuery не распознает его таким по умоланию. Следующие протоколыв в настоящее время признаются как локальные:file
,*-extension
иwidget
. Если опцияisLocal
требует изменения, то рекомендуется сделать это один раз при помощи метода$.ajaxSetup()
. (добавлен в версии: 1.5.1) -
jsonpПереопределяет имя функции обратного вызова в JSONP запросе. Это значение используется вместо названия функциии
'callback'
в URL-параметре 'callback=?'. Так{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
устанавливается в качестве возвращаемого значения этой функции. -
method (значение по умолчанию:
'GET'
)Тип: StringHTTP метод используемый в запросе (например"POST"
,"GET"
,"PUT"
и т.д.). (добавлен в версии: 1.9.0) -
mimeTypeТип: StringMIME тип переопределяющий XHR MIME тип. (добавлен в версии: 1.5.1)
-
passwordТип: StringПароль для использования с XMLHttpRequest в ответ на запрос basic http авторизации.
-
processData (значение по умолчанию:
true
)Тип: BooleanПо умолчанию данные, передаваемые в параметрdata
в качестве объекта (технически, все кроме строки) будут обработаны и преобразованы в строку запроса, подходящую для типа данных по умолчанию"application/x-www-form-urlencoded"
. Если Вы хотите отправить DOM документ, или другие необрабатываемые данные, установите значение данного параметр вfalse
. -
scriptCharsetТип: StringПрименяется только при использовании
"script"
в качестве транспорта (например, кросс-доменные запросы с "jsonp" или "script" dataType и методом "GET"). Устанавливает аттрибутcharset
используемого тэгаscript
в запросе. Используется, когда кодировка символов на текущей странице отличается от кодировки символов удаленного скрипта. -
statusCode (значение по умолчанию:
{}
)Тип: PlainObjectОбъект с числовыми кодами HTTP кодов статусов и функции которые будут вызваны когда статус ответа имеет соотвествующее значение. Например, следующий alert будет вызван когда статус ответа будет 404:
1234567$.ajax({
statusCode: {
404: function() {
alert( "страниц не найдена" );
}
}
});
Если запрос успешен, то соотвествующая функция будет принимать те же самые параметры что и
(добавлен в версии: 1.5)success
обработчик; если результат ошибка (включая редиректы 3xx), то эти функции примут те же параметры что и обработчикerror
. -
successФункция вызываемая если запрос успешен. Функция принимает три аргумента: data - данные возвращенные с сервера, отформатированные в соответствии с параметром
dataType
илиdataFilter
если они указаны; строка описывающая статус; и объектjqXHR
(в версии jQuery 1.4.x и ниже XMLHttpRequest). Начиная с jQuery 1.5, Этот параметр может принимать массив функций. Каждая функция будет вызывана в свою очедерь. Является Ajax событием. -
timeoutТип: NumberЗадает таймаут запроса (в милисекундах). Этот параметр переопределяет глобальный таймаут, устанавливаемый при помощи метода $.ajaxSetup(). Этот таймаут запускается в момент запуска метода
$.ajax
; если несколько других запросов в процессе работы и браузер не имеет сетевого подключения, то возможен запрос на таймаут, прежде чем он будет отправлен. В версии jQuery 1.4.x и ниже, объект XMLHttpRequest будет находиться в недопустимом состоянии если время ожидния будет превышено; обращение к любым методам объекта сгенерирует исключение. В Firefox 3.0+, script и JSONP запросы не могут быть отменены по таймауту; скрипт будет работать, даже если он прийдет после таймаута. -
traditionalТип: BooleanИспользуйте значение
true
если Вы хотите использовать традиционный стиль сериализации параметров. -
type (значение по умолчанию:
'GET'
)Тип: StringСиноним для параметраmethod
. Вы должны использоватьtype
если Вы используете версию jQuery до 1.9.0. -
url (значение по умолчанию:
Текущий URL-адрес
)Тип: StringСтрока содержащая URL-адрес на который будет отправлен запроса. -
usernameТип: StringИмя пользователя используемое с XMLHttpRequest в ответ на запрос basic http авторизации.
-
xhr (значение по умолчанию:
ActiveXObject когда доступен (IE), иначе XMLHttpRequest
)Тип: Function()Функция обратного вызова для создания объекта XMLHttpRequest. По умолчанию используется ActiveXObject когда доступен (для IE), иначе используется XMLHttpRequest. У Вас есть возможность переопределить создание этого объекта и вернуть свою реализацию XMLHttpRequest или улучшить создание этого объекта. -
xhrFieldsТип: PlainObject
Объект с парами fieldName-fieldValue для установки в нативный объект
XHR
. Например, Вы можете использовать значениеwithCredentials
равноеtrue
для кросс-доменных запросов в случае необходимости.123456$.ajax({
url: a_cross_domain_url,
xhrFields: {
withCredentials: true
}
});
В jQuery 1.5, свойство
(добавлен в версии: 1.5.1)withCredentials
не будет распространено на нативный объектXHR
и таким образом CORS запросы требуя его будет игнорировать этот флаг. По этой причине, мы рекомендуем использовать jQuery 1.5.1+.
-
-
Функция $.ajax()
лежит в основе всех Ajax запросов отправляемых при помощи jQuery. Зачастую нет необходимости вызывать эту функцию, так как есть несколько альтернатив более высого уровня, такие как $.get()
и .load()
, которые более простые в использовании. Если требуется менее распространенные варианты , через, $.ajax()
Вы можете более гибко скофигурировать запрос.
В простейшем виде, функция $.ajax()
может быть вызвана без аргументов:
1
|
|
Важно: настройки по умолчанию могут быть установлены при помощи функции $.ajaxSetup()
.
Этот пример, не используюя никаких параметров, загружает содержимое текущей страницы, но ничего не делает с результатом. Для использования результата, Вы можете реализовать одну из функция обратного вызова.
Объект jqXHR
Объект jQuery XMLHttpRequest (jqXHR) возвращается функцией $.ajax()
начиная с jQuery 1.5 является надстройкой над нативным объектом XMLHttpRequest. Например, он содержит свойства responseText
и responseXML
, а также метод getResponseHeader()
. Когда траспортом используемым для запрос является что то иное, а не XMLHttpRequest (например, тэг script
tag для JSONP запроса) объект jqXHR
эмулирует функционал нативного XHR там где это возможно.
Начиная с jQuery 1.5.1, объект jqXHR
также содержит метод overrideMimeType()
(он был доступен в jQuery 1.4.x, но был временно удален в версии jQuery 1.5). Метод .overrideMimeType()
может быть использован в обработчике beforeSend()
, например, для изменения поля заголовка content-type
:
1
2
3
4
5
6
7
8
9
10
11
|
|
Объект jqXHR возвращаемый методом $.ajax()
в версии jQuery 1.5 реализует интерфейс Promise, дающий ему все свойства, методы и поведение Promise. Эти методы принимают один или несколько аргументов, которые вызываются при завершении запроса инициированного при помощи $.ajax()
. Это позволяет назначать несколько обработчиков на один запрос и даже назначать обработчики после того как запрос может быть завершен. (Если запрос уже выполнен, то обработчики вызовутся немедленно). Доступные методы Promise в объекте jqXHR:
-
jqXHR.done(function( data, textStatus, jqXHR ) {});
Альтернатива создания обработчика
success
, подробнее смотрите наdeferred.done()
. -
jqXHR.fail(function( jqXHR, textStatus, errorThrown ) {});
Альтернатива создания обработчика
error
, метод.fail()
заменяет устаревший метод.error()
. Смотрите подробнееdeferred.fail()
. -
jqXHR.always(function( data|jqXHR, textStatus, jqXHR|errorThrown ) { }); (добавлен в версии jQuery 1.6)
Альтернатива создания обработчика
complete
, метод.always()
заменяет устаревший метод.complete()
.В ответ на успешный запрос, аргументы функции те же самые что и у
.done()
: data, textStatus и объект jqXHR. Для ошибочных зпросов аргументы те же самые что и у.fail()
: объект jqXHR, textStatus и errorThrown. Смотрите подробнее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()
соответственно.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
|
Ссылка this
внутри всех обработчиков указывает на объект заданный в параметре context
переданные в аргумент settings метода $.ajax
; если context
не указан, то this
указывает на объект settings.
Для обеспечения обратной совместимости с кодом XMLHttpRequest
, в объекте jqXHR
предоставляет следующие свойства и методы:
-
readyState
-
status
-
statusText
-
responseXML
и/илиresponseText
когда запрос вернул xml и/или text, соответственно -
setRequestHeader(name, value)
те заголовки что отходят от стандарта, заменят старое значение на новое, а не конкатенируют старое и новые значения -
getAllResponseHeaders()
-
getResponseHeader()
-
statusCode()
-
abort()
Механизма onreadystatechange
не предусмотрено, так как done
, fail
, always
и statusCode
охватывает все возможные требования.
Очередность функций обратного вызова
Все параметры beforeSend
, error
, dataFilter
, success
и complete
принимают в качестве значений функции обратного вызова, которые вызываются в соотвествующие моменты времени.
С версии jQuery 1.5 функции fail
и done
, и, начиная с jQuery 1.6, always
вызовутся в первую очередь, первыми из упрвляемой очереди, что позволяет более чем один обработчик для каждого элемента очереди. Смотрите отложенные методы, которые реализуют внутренности обработчиков метода $.ajax()
.
Функции обратного вызова предоставленные методом $.ajax()
следующие:
-
beforeSend
вызывается всегда; принимаетjqXHR
объект и объектsettings
как параметры. -
error
вызывается, если запрос выполняется с ошибкой. Принимает объектjqXHR
, строку со статусом ошибки и объект исключения если применимо. Некоторые встроенные ошибки обеспечивают строку качестве объекта исключения: "abort", "timeout", "No Transport". -
dataFilter
вызывается немедленно при успешном получении данных ответа. Принимает в качестве параметров возвращенные данные и знчение параметраdataType
и должен вернуть (возможно измененные данные) для передачи далее в обработчикsuccess
. -
success
вызывается если запрос выполнен успешно. Принимает данные ответа, строку содержащую код успеха и объектjqXHR
. -
Promise обработчик —
.done()
,.fail()
,.always()
и.then()
— выполняются, в том порядке в котором зарегистрированы. -
complete
вызывается когда запрос закончен, независимо от успеха или неудачи выполнения запроса. Принимает объектjqXHR
, отформатированную строку со статусом успеха или ошибки.
Типы данных
Различные типы ответа на вызов $.ajax()
подвергаются различным видам предварительной обработки перед передачей обработчика success
. Тип предварительной подготовки зависит от указанного в ответе поля заголовка Content-Type
, но может быть явно указан при помощи опции dataType
. Если параметр dataType
задан, то поле заголовка Content-Type
будет проигнорирован.
Возможны следующие типы данных: text
, html
, xml
, json
, jsonp
и script
.
Если указан text
или html
, никакой предварительной обработки не происходит. Данные просто передаются в обработчик success
и доступны через свойство responseText
объекта jqXHR
.
Если указан xml
, то ответ парсится при помощи jQuery.parseXML
перед передачей в XMLDocument
в обработчик success
. XML документ доступен через свойство responseXML
объекта jqXHR
.
Если указан json
, то ответ парсится при помощи jQuery.parseJSON
перед передачей в объект для обработчика success
. Полученный JSON объект доступен через свойство responseJSON
объекта jqXHR
.
Если указан script
, то $.ajax()
выполнит JavaScript код который будет принят от сервере перед передачей этого кода как строки в обработчик success
.
Если указан jsonp
, $.ajax()
автоматически добавит в строку URL запроса параметр (по умолчанию) callback=?
. Параметры jsonp
и jsonpCallback
из объекта settings переданных в метод $.ajax()
могут быть использованы для указания имени URL-параметра и имени JSONP функции обратного вызова соответственно. Сервер должен вернуть корректный Javascript который будет переда в обработчик JSONP. $.ajax()
выполнит возвращенный JavaScript код, вызвыв функцию JSONP по ее имени, перед передачей JSON объекта в обработчик success
.
Отправка данных на сервер
По умолчанию, Ajax запросы отправляются при помощи GET HTTP метода. Если POST метод требуется, то метод следует указать в настройках при помощи параметра type
. Этот параметр влияет на то как данные из параметра data
будут отправлены на сервер. Данные POST запроса всегда будут переданы на сервере в UTF-8 кодировкепо стандарту W3C XMLHTTPRequest.
Параметр data
может содержать строку произвольной формы, например сериализованная форма key1=value1&key2=value2
или Javascript объект {key1: 'value1', key2: 'value2'}
. Если используется последний вариант, то данные будут преобразованы в строку при помощи метода jQuery.param()
перед их отправкой. Эта обработка может быть отключена при помощи указания значения false
в параметре processData
. Обработка может быть нежелательной, если Вы хотите отправить на сервере XML документ, в этом случае измените параметр contentType
с application/x-www-form-urlencoded
на более подходящий MIME тип.
Расширенные настройки
Параметр global
предотвращает выполнение обработчиков зарегистрированных при помощи методов .ajaxSend()
, .ajaxError()
и подобных методов. Это может быть полезно, например, для скрытия индикатора загрузки реализованного при помощи .ajaxSend()
если запросы выполняются часто и быстро. С кросс-доменными и JSONP запросами, параметр global
автоматически устанавливается в значение false
.
Если сервер выполняет HTTP аутентификацию перед предоствлением ответа, то имя пользователя и пароль должны быть отправлены при помощи параметров username
и password
options.
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
:
1
2
3
4
5
6
7
8
9
10
11
|
|
Этот дополнительный объект необходим, потому что Content-Types
ответа и типы данных никогда не имеют однозначного соответствия между собой (отсюда и регулярное выражение).
Для преобразования из поддерживаемого типа (например text
или json
) в пользовательский тип данных и обратно, используйте другой сквозной преобразователь:
1
2
3
4
5
6
7
8
9
10
11
12
|
|
Пример выше позволяет перейти из text
в mycustomtype
и затем из mycustomtype
в json
.
Дополнительные замечания:
- Из за ограничений безопасности браузера, большинство "Ajax" запросов подвергаются политике того же домена, которая не позволяет выполнять запросы к другим доменам, поддоменам, портам или протоколам.
- Script и JSONP запросы не подвергаются ограничениям этой политики.