Модуль обеспечивает базовую работу с ajax-запросами, предоставляет два класса Request и Transport, а также функцию request.
Класс Request наследуется от basis.net.Request и является оберткой над XMLHttpRequest. Класс Transport наследуется от basis.net.AbstractRequest, создает экземпляры Request и управляет ими.
Для экземпляра Transport задаются параметры:
asynchronous - асинхронное выполнение запроса (по умолчанию true)method - HTTP-метод (по умолчанию GET)encoding - кодировкаrequestHeaders - базовые заголовки для запросаresponseType - тип ответа (XMLHttpRequest#responseType)url - адрес для запросаparams - список параметров, дополняющий queryStringrouterParams - объект, значения которого используются для подстановок в urlcontentType - тип передаваемого содержимого (по умолчанию application/x-www-form-urlencoded)postBody - (DEPRECATED) тело запроса (строка или XML)body - тело запроса (строка или XML)bodyContext - ???Все эти значения используются как базовые, если они не указаны в параметрах запроса. Значения params подмешиваются к params запроса, routerParams к routerParams, а requestHeaders к headers. Все эти значения можно задать (переопределить) при выполнении запроса методом request, который принимает объект со значениями.
var Transport = basis.require('basis.net.ajax').Transport;
var transport = new Transport({
url: '/users',
method: 'GET',
handler: {
success: function(transport, request, response){
// обработка успешного выполнения запроса
},
failure: function(transport, request, error){
// обработка неудачного выполнения запроса
}
}
});
transport.request({
params: {
userId: 123
}
});
// будет выполнен асинхронный GET запрос /users?userId=123
Для выполнения запроса используется метод request. Метод принимает один параметр - это объект, в котором можно указать дополнительные параметры запроса или переопределить параметры экземпляра Transport (те, что описаны выше).
Классы обладают дополнительным событием readyStateChanged, которое срабатывает при изменениии readyState у XMLHttpRequest.
В остальном работа классов сводится к общим принципам работы basis.net модулей.
[TODO: timeout/response processing/prepare/repeat]
Также можно использовать специальную функцию-хелпер basis.net.ajax.request для создания и немедленного выполнения запроса. Эта функция удобна для простых одноразовых запросов.
Данная функция создает объект Transport, добавляет ему обработчики, выполняет запрос с указанными параметрами, а по завершению запроса разрушает транспорт. Функция принимает три параметра:
config - конфигурация для TransportsuccessCallback - функция, выполняемая в случае успешного запросаfailureCallback - функция, выполняемая в случае ошибки или когда запрос прерванВ качестве конфигурации можно задавать строку, которая будет url транспорта. В этом случае, если не указывается successCallback и failureCallback, то запрос выполняется синхронно, что удобно в простых случаях:
// синхронный запрос
var response = basis.net.ajax.request('/data.json');
// асинхронный запрос
basis.net.ajax.request('/data.json', function(response){
// response содержит тело ответа
});
В случае, когда первым параметром передается объект, запрос выполняется со значениями по умолчанию, асинхронно.
basis.net.ajax.request({
url: '/users',
params: {
userId: 123
},
handler: {
success: function(transport, request, response){
console.log('response data:', response);
},
failure: function(transport, request, error){
console.log('response error:', error);
}
}
});