Кто может поделитесь простым примером, как вы отправляете информативное сообщение, в случае обработки запроса ajax, когда нужно вернуть ошибку.
Как это выглядит на стороне сервера и как это выглядит на стороне клиента
вот например, мой пример
/* формирование ajax-запроса, на проверку аутентификации*/
function isAuthentication(email, password) {
$.ajax({
url: 'api/employees/auth/signin/' + email + '/' + password,
method: 'get',
//dataType: 'json',
success: function () {
successAuth();
},
error: function (data) {
handlingErrStatusQueryAuth(data);
}
});
}
var notAccess = "Доступ запрещен!";
var notAccessEn = "Access denied!"
var successAuth = function () {
$(".authentication").html("OK").css("color","red");
}
/*обработка запроса на аутентификацию*/
var handlingErrStatusQueryAuth = function (data) {
if (data.status === 401) {
$(".authentication").html("");
// $(".authentication").css('color', red);
$(".authentication").html(notAccess).css("color", "red");
}
}
а это сторона сервера
/**
* Проверка аутентификации пользователя
* @param email
* @param password
*/
@GET
@Path( "/auth/signin/{email}/{password}" )
public Response isValidUser(@PathParam( "email" ) String email,
@PathParam( "password" ) String password) {
EmployeeDao dao = new EmployeeDaoImpl();
Employee employee = dao.loadEmployeeByFieldStr("email", email);
String passwordTarget = employee.getPassword();
if (employee != null && password.equals(passwordTarget)) {
Response.ResponseBuilder status = Response.ok();
Response response = status.build();
return response;
} else {
Response.ResponseBuilder status = Response.status(401);
Response response = status.build();
return response;
}
}
Как это можно переделать, в соответствии с моим вопросом?
Чуть ниже указал ссылку на сайт, где показан один из вариантов, использования WebApplicationException
Я использую php так что бэкенд не буду описывать просто покажу как я принимаю и обрабатываю ответы, а о серверной части расскажу абстрактно.
Для фронтэнда использую JS плагин SweetAlert. Благо алерты на нем делаются моментально и очень красиво. Устанавливается быстро, не имеет зависимостей от jquery
или bootstrap
.
На сервере я генерирую строку в json формате и статус 200 - выполнено, или ошибку 404, 403, 401 и т.д.
JSON
{
"message": "Данные успешно удалены",
"action": "redirect|reload|close",
"uri": "http://mydomain.com"
}
action
это действие которое будет после того как пользователь закроет уведомление
redirect + uri
- переадресация, reload
- перезагрузка страницы, close
- закрытие уведомления и больше ничего (только когда статус 200).
А вот собственно и сам код
function errorHandler(response) {
try {
var answer = JSON.parse(response.responseText);
var message = answer.message !== undefined ? answer.message : 'Неизвестная ошибка!';
swal({
type: 'error',
text: message,
title: 'Ошибка!',
html: true
});
} catch (err) {
swal({
type: 'error',
text: response.responseText,
title: 'Ошибка',
html: true
});
}
}
function successHandler(response) {
try {
var func;
var answer = JSON.parse(response);
var message = answer.hasOwnProperty('message') ? answer.message : 'Все гуд!';
var action = answer.hasOwnProperty('action') ? answer.action : 'reload';
if (action == 'redirect') {
func = function () {
window.location.href = answer.uri;
}
} else if (action == 'reload') {
func = function () {
location.reload();
};
} else if (action == 'close') {
func = function () {
swal.close();
};
}
swal({
type: 'success',
text: message,
title: 'Выполнено',
closeOnConfirm: false
}, func);
} catch (err) {
elog(response);
swal({
type: 'error',
text: response,
title: 'Ошибка',
html: true
});
}
}
$.ajax({
type: 'post',
url: '/',
data: {},
success: function (answer) {
successHandler(answer);
},
error: function (answer) {
errorHandler(answer);
}
});
Для различных видов ошибокможно использовать разные исключения и механизм их перехватчиков, оборачивающих исключения в ответ сервера с определённым типом ошибок (HTTP статусом). Соответственно, на беке останется просто время от времени выбрасывать исключения с желаемым текстом, дополнительно описывающим ситуацию. Не забываем логирование на уровне ERROR. На фронте можно просто воспользоваться статусной панкелькой для вывода сообщений с разноцветной подсветкой (красный - критические ошибки, жёлтый - предупреждения, зелёный - информационные соообщения) - такие элементы интерфейса доступны в инструментах на подобие Bootstrap.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Вот весь код, который задействован
Есть кастомный адаптер для лист вью в который добавляются сообщенияПоследовательность сообщений идет сверху вниз
Откомпилировал одно и тоже приложение примерно по 1000 раз на 86 и 64 разрядной windows 7 результат такой:
Имеется 2 массива с числамиЭлементы в них находятся в некой зависимости, т