Суть моего вопроса такова: если я выдаю запрос на $ .ajax на мой сервер для проверки на стороне сервера - как я должен ожидать ответа на проверку? Я вижу себя как имеющие два варианта:Рекомендации по получению сообщений об исключениях сервера по запросу ajax
// Server handled error:
$.ajax({
url: 'controller/action',
data: {},
success: function(response){
console.log("Error:", response.error);
}
}
// Server unhandled error:
$.ajax({
url: 'controller/action',
data: {},
success: function(){
},
error: function(error){
console.log("Error:", error);
}
}
Прежний пример предполагает, что контроллер моего сервера имеет TRY/поймать который потребляет любые серверные исключения. Затем он принимает любые исключения и возвращает их как часть объекта успеха json. Последнее позволяет исключить серверное исключение и попасть в обработчик ошибок ajax.
Лично я думал, что предпочитаю последний. Тем не менее, я просто столкнулся с проблемой удаленного взаимодействия - если настройки безопасности нашего сервера не смягчены, сообщение об ошибке скрывается как «Ошибка выполнения», и чтение информации об ошибке из обработчика событий onerror ajax становится невозможным.
Я хотел бы избежать этой проблемы, мне нужно всегда иметь возможность читать мои ошибки, но кажется, что действительно неправильно, чтобы мой запрос ajax всегда возвращался успешно.
Как это нормально обрабатывается?
[HttpPost, AjaxOnly]
public ActionResult ChangePassword(ChangePasswordDialogModel model)
{
string error = string.Empty;
if (model.NewPassword == model.NewPasswordConfirm)
{
using (var service = new SecurityServicesSoapClient())
{
error = service.ChangePassword(SessionManager.Default.User.UserName, model.OldPassword,
model.NewPassword);
}
}
else
{
error = "New Password and Confirm do not match. Please re-enter";
}
if (!string.IsNullOrEmpty(error))
throw new Exception(error);
return Json(new
{
success = true
});
}
Это значение по сравнению с установочным успешным значением false и установкой свойства ошибки на сообщение об ошибке.
Лично я рассматриваю клиентский и серверный код как отдельные приложения. Первый - это просто доступ к API на последнем. Поэтому я хочу убедиться, что серверное приложение (например, любое приложение) _never_ имеет необработанные исключения. Если есть условие ошибки, которое требуется для связи с клиентом, он должен сделать это в структуре, знакомой этому клиенту. В HTTP это будут коды ошибок и тела ответа. – David