Функция $.ajax()

Практически все функции, которые мы рассматривали в предыдущих разделах, вызывают функцию $.ajax(). Она является универсальной и позволяет полностью контролировать весь процесс обмена данными с сервером. Формат функции:

$.ajax(<Объект с опциями>)

Функция возвращает ссылку на объект XMLHttpRequest. Единственный параметр представляет собой объект, состоящий из пар "опция/значение". Могут быть указаны следующие опции.

{
   Параметр1: "Значение1",
   Параметр2: "Значение2",
   ...
   ПараметрN: "ЗначениеN"
}

В случае если параметры или значения содержат запрещенные символы, то они будут автоматически перекодированы с помощью метода encodeURIComponent(). В качестве значения опции data можно также указать сформированную строку запроса. В этом случае заботиться о допустимости символов необходимо самим.

txt=%D0%A2%D0%B5%D0%BA%D1%81%D1%82&id=80
GET /ajax.php?_=1247862154453&txt=5 HTTP/1.1
$.ajax({
   url: "/ajax.php",
   data: [1,2,3],
   dataType: "text",
   processData: false,
   success: function(data) {
      alert(data);
   }
});

В результате строка запроса будет выглядеть так.

GET /ajax.php?1,2,3 HTTP/1.1

Если опция имеет значение true или не указана, то результат будет другим.

GET /ajax.php?undefined=undefined&undefined=undefined
&undefined=undefined HTTP/1.1
If-Modified-Since: Thu, 01 Jan 1970 00:00:00 GMT

Во втором запросе в этом заголовке будет уже указана дата последнего изменения данных, полученная с сервера в первом запросе.

If-Modified-Since: Sun, 25 Jan 2009 23:48:56 GMT

Если сервер вернет код статуса 304 (документ без изменений), то функция, указанная в опции success, вызвана не будет.

$.ajax({
   url: "http://site1/ajax.php",
   data: "txt=test",
   dataType: "jsonp",
   jsonp: "callback",
   success: function(data) {
      alert(data.param1);
   }
});

Строка запроса будет выглядеть следующим образом.

GET /ajax.php?callback=jsonp1247869542750&_=1247869544031
&txt=test HTTP/1.1
function <Название функции>(<Объект XMLHttpRequest>) {
   // ...
}

В качестве примера изменим значение заголовка User-Agent.

beforeSend: function(obj) {
   obj.setRequestHeader("User-Agent", "MyRobot");
}
function <Название функции>(<Данные>[, <Тип данных>]) {
   // Обрабатываем данные
   return <Данные>; // Возвращаем обработанные данные
}
function <Название функции>(<Объект XMLHttpRequest>[,
                            <Статус>]) {
   // ...
}
function <Название функции>(<Данные>[, <Статус>]) {
   // ...
}

Через параметр <Данные> доступны данные, обработанные с учетом значения опции dataType.

function <Название функции>([<Объект XMLHttpRequest>[,
    <Текст ошибки>[, <Исключение>]]]) {
   // ...
}

Параметр <Текст ошибки> может возвращать следующие значения: null, "timeout", "error", "notmodified" или "parsererror". Параметр <Исключение> позволяет получить информацию об ошибке при значении null в параметре <Текст ошибки>. Например, в веб-браузере Opera при обращении к другому домену в параметре <Исключение> будет следующее значение:

[Error:
name: Error
message: Security violation
]

Все указанные опции можно указать в функции $.ajaxSetup(). В этом случае это будут значения по умолчанию для всех запросов. Формат функции:

$.ajaxSetup(<Объект с опциями>)

Рассмотрим пример.

$.ajaxSetup({                  // Запрос методом GET
   url: "/ajax.php",           // URL-адрес
   dataType: "html",           // Тип возвращаемых данных
   cache: false,               // Запрет кеширования
   success: function(data) {   // При удачном запросе
      alert(data);
   },
   error: function(obj, err) { // При ошибке
      alert("Ошибка: " + err);
   }
});
$.ajax({ // Все опции запроса указаны в $.ajaxSetup()
   data: { id:1, txt:"Данные" } // Передаваемые данные
});
Предыдущая статья Все статьи Следующая статья