Advanced

Обработка ошибок при загрузке данных

Так как загрузка данных зависит от множества факторов, сервер может возвращать сообщения об ошибках вместо запрашиваемых данных. Webix позволяет отлавливать такие ошибки и обрабатывать их на клиенте.

Обработка ошибок по умолчанию

По умолчанию, если происходит какая-либо ошибка приложение на Webix генерирует webix.message и выводит подробное описание ошибки в консоль. Это функциональность доступна только в полной неминифицированной версии.

Глобальные события для обработки ошибок

Вы можете создать свой обработчик ошибок, который будет отлавливать сообщения об ошибках с сервера вне зависимости от компонента, с которым вы работаете:

  • onAjaxError (xhr) - срабатывает при любой ошибке Ajax запроса
  • onLoadError (xhr, view) - срабатывает, когда ошибка произошла в момент загрузки данных в компонент.

Глобальные события и их обработчики вешаются на объект Webix:

webix.attachEvent("onLoadError", function(xhr, view){
    // xhr - объект xmlHttpRequest 
    // view - компонент, в котором произошла ошибка
 
    // ваш код
});

Обратите внимание, что эти события срабатывают только для тех Ajax запросов, которые генерирует Webix. Это может быть кастомное событие, созданное с помощью интерфейса Webix Ajax или автоматическое (сформированное компонентом при загрузке или сохранении данных).

События при ошибках в компоненте

У каждого компонента есть собственное событие onLoadError, обработчик которого принимает xhr параметр:

$$("list").attachEvent("onLoadError", function(xhr){
    /* ваш код для обработки */
});

Обработка ошибок запроса данных

Результат запроса данных – промис. Если сервер возвращает данные, промис считается успешным и вы можете работать с этими данными в методе then(). Если же произошла ошибка, вы можете обработать её с помощью метода fail():

$$("list").load("data.php").then(function(data){
    /* ... */
}).fail(function(err){
    /* ... */
});

То же самое можно сделать и при запросе через webix.ajax:

webix.ajax("data.php").then(function(data){
    /* ... */
}).fail(function(err){
    /* ... */
});

Более того, вы можете добавить функции, которые будут отрабатывать при успешном и неуспешном запросах:

$$("list").load("data.php",{
    success:function(text, data, ajax){ /* ... */ },
    error:function(text, data, ajax){ /* ... */ }
});
 
webix.ajax("data.php", {
    success:function(text, data, xhr){ /* ... */ },
    error:function(text, data, xhr){ /* ... */ }
});
Наверх