модуль ajax для scheduler
// предположим, что ответ следующий
{status: "ok", data: "value", data2: "value2"}
var xhr = scheduler.ajax;
// HTTP GET
xhr.get("server.php").then(function(response) {
var res = JSON.parse(response.responseText);
if (res && res.status == "ok") {
// ответ в порядке
}
});
// HTTP POST
xhr.post({
url:"server.php",
data: {
paramName: "paramValue"
}
}).then(function(response){
var res = JSON.parse(response.responseText);
if (res && res.status == "ok") {
// ответ в порядке
}
});
Все методы принимают параметры в одном из двух форматов:
1) Объект RequestConfig, который содержит настройки запроса и выглядит так:
{
url: string,
method: "PUT|GET|POST|DELETE",
data: string | object,
async: true|false,
callback: function,
headers: object
}
Значения свойств:
или:
2) Три отдельных параметра (кроме метода query(), который принимает только объект RequestConfig):
Ниже приведён список методов, доступных в API модуля ajax:
Все методы поддерживают как callback, так и promises для обработки ответов.
Промис ajax резолвится с завершённым объектом XmlHttpRequest:
scheduler.ajax.post({
url:"some.php",
data: {
paramName: "paramValue"
}
}).then(function(response){
alert(response.responseText);
});
Для обратной совместимости callback получает ответ в немного другом формате:
scheduler.ajax.post({
url:"some.php",
data: {
paramName: "paramValue"
},
callback: function(result){
var response = result.xmlDoc;
alert(response.responseText);
}
});
Общий метод для отправки запросов. Может обрабатывать любой тип запроса, указывая метод в параметрах.
scheduler.ajax.query({
url:"some.php",
method:"POST",
data: {
paramName: "paramValue"
}
}).then(function(response){
alert(response.responseText);
});
Отправляет GET-запрос.
scheduler.ajax.get("some.php", function(){
// ваш код здесь
});
// или
scheduler.ajax.get({
url: "https://…",
callback: function() {…},
headers: { "Content-Type": "application/json" }
});
Отправляет PUT-запрос.
scheduler.ajax.put("server.php", "keep_alive=1&version=std", function(){
// ваш код здесь
});
// или
scheduler.ajax.put({
url: "https://…",
callback: function() {…},
headers: { "Content-Type": "application/json" },
data: {}
});
Отправляет DELETE-запрос.
scheduler.ajax.del("server.php", function(){
// ваш код здесь
});
// или
scheduler.ajax.del({
url: "https://…",
callback: function() {…},
headers: { "Content-Type": "application/json" }
});
Отправляет POST-запрос.
scheduler.ajax.post("server.php", "keep_alive=1&version=std", function(){
// ваш код здесь
});
// или
scheduler.ajax.post({
url: "https://…",
callback: function() {…},
headers: { "Content-Type": "application/json" },
data: {}
});
При использовании post или put можно передать объект вместо строки в data. Модуль ajax автоматически сериализует объект. Простые объекты сериализуются как form data (например, ¶m=value), а вложенные структуры сериализуются с помощью JSON.stringify().
Например, объект:
{
id: 1,
text: "My Task",
users: [1,2,3]
}
будет преобразован в строку вида id=1&text=My%20Task&users=%5B1%2C2%2C3%5D
.
dhtmlxScheduler поддерживает promises (включая IE8+). Внутри используется библиотека Bluebird для работы с промисами. Для создания промиса используйте:
var promise = new scheduler.Promise(function(resolve, reject) {...});
Реализация промисов находится внутри Scheduler, поэтому не глобальна.
Модуль AJAX возвращает промисы, позволяя использовать синтаксис промисов вместо callback. Например, вместо
scheduler.ajax.post(url, params, callback);
можно написать
scheduler.ajax.post(url, params).then(function(){…});
Callback и promises можно использовать вместе.
Пример отправки нескольких запросов одновременно и последующей перезагрузки данных после их завершения:
scheduler.Promise.all([
scheduler.ajax.post({url: "api/event", data: event1}),
scheduler.ajax.post({url: "api/event", data: event2}),
scheduler.ajax.post({url: "api/event", data: event3})
]).then(function(){
scheduler.clearAll();
scheduler.load("/api");
});
added in version 6.0
Наверх