Есть ли какой-нибудь способ показать пользовательские сообщения об исключениях в качестве предупреждения в моем сообщении об ошибке jQuery AJAX?
Например, если я хочу создать исключение на стороне сервера через Struts by throw new ApplicationException("User name already exists");
, я хочу перехватить это сообщение («имя пользователя уже существует») в сообщении об ошибке jQuery AJAX.
jQuery("#save").click(function () {
if (jQuery('#form').jVal()) {
jQuery.ajax({
type: "POST",
url: "saveuser.do",
dataType: "html",
data: "userId=" + encodeURIComponent(trim(document.forms[0].userId.value)),
success: function (response) {
jQuery("#usergrid").trigger("reloadGrid");
clear();
alert("Details saved successfully!!!");
},
error: function (xhr, ajaxOptions, thrownError) {
alert(xhr.status);
alert(thrownError);
}
});
}
});
На втором оповещении, когда я предупреждаю о сгенерированной ошибке, я получаю, undefined
и код состояния равен 500.
Я не уверен, где я иду не так. Что я могу сделать, чтобы решить эту проблему?
источник
xhr.responseJSON
. : Dконтроллер:
Посмотреть скрипт:
источник
response.StatusCode = (int)HttpStatusCode.InternalServerError;
иresponse.StatusDescription = filterContext.Exception.Message;
ServerSide:
Сторона клиента:
Обобщенная обработка ошибок Ajax
Если мне нужно сделать общую обработку ошибок для всех запросов AJAX. Я установлю обработчик ajaxError и выведу ошибку на div с именем errorcontainer в верхней части содержимого HTML.
источник
Вам нужно конвертировать в
responseText
JSON. Использование JQuery:источник
Если сделать вызов asp.net, это вернет заголовок сообщения об ошибке:
Я не написал все formatErrorMessage сам, но я нахожу это очень полезным.
источник
Это то, что я сделал, и это работает до сих пор в приложении MVC 5.
Тип возврата контроллера - ContentResult.
А на стороне клиента это выглядит как функция ajax
источник
Если кто-то здесь, как в 2016 году для ответа, используйте
.fail()
для обработки ошибок, так как.error()
устарела с jQuery 3.0Я надеюсь, что это помогает
источник
jqXHR.error()
осуждается ( на самом деле удалены) в JQuery 3.0, ноerror
иsuccess
обратные вызовы$.ajax()
не осуждается, насколько я знаю.Общее / многоразовое решение
Этот ответ предназначен для использования в будущем для всех тех, кто сталкивается с этой проблемой. Решение состоит из двух вещей:
ModelStateException
которое возникает при сбое проверки на сервере (состояние модели сообщает об ошибках проверки, когда мы используем аннотации данных и строгие параметры действия контроллера)HandleModelStateExceptionAttribute
который перехватывает пользовательское исключение и возвращает статус ошибки HTTP с ошибкой состояния модели в телеЭто обеспечивает оптимальную инфраструктуру для вызовов jQuery Ajax для использования их полного потенциала с
success
иerror
обработчиками обработчиками.Код на стороне клиента
Серверный код
Вся проблема подробно описана в этом посте, где вы можете найти весь код для запуска этого приложения.
источник
Я нашел это хорошим, потому что я мог разобрать сообщение, которое я отправлял с сервера, и показать дружественное сообщение пользователю без трассировки стека ...
источник
такие как
источник
Вероятно, это вызвано тем, что имена полей JSON не имеют кавычек.
Измените структуру JSON с:
чтобы:
источник
У вас есть объект JSON исключительной ситуации в объекте xhr. Просто используйте
Объект JSON предоставляет два других свойства: «ExceptionType» и «StackTrace»
источник
Я считаю, что обработчик ответов Ajax использует код состояния HTTP, чтобы проверить, не было ли ошибки.
Поэтому, если вы просто сгенерируете исключение Java в коде на стороне сервера, но в ответе HTTP нет кода состояния 500 jQuery (или в этом случае, вероятно, XMLHttpRequest объект ) просто предположит, что все в порядке.
Я говорю это, потому что у меня была похожая проблема в ASP.NET, где я генерировал что-то вроде ArgumentException («Не знаю, что делать ...»), но обработчик ошибок не срабатывал.
Затем я устанавливаю
Response.StatusCode
500 или 200 независимо от того, была ли у меня ошибка или нет.источник
jQuery.parseJSON полезен для успеха и ошибки.
источник
Эта функция в основном генерирует уникальные случайные ключи API, и в случае, если это не так, появляется всплывающее диалоговое окно с сообщением об ошибке
На странице просмотра:
От контроллера:
Необязательный параметр обратного вызова указывает функцию обратного вызова, которая запускается после завершения метода load (). Функция обратного вызова может иметь разные параметры:
Функция, вызываемая в случае сбоя запроса. Функция получает три аргумента: объект jqXHR (в jQuery 1.4.x, XMLHttpRequest), строка, описывающая тип возникшей ошибки и необязательный объект исключения, если таковой произошел. Возможные значения для второго аргумента (кроме нуля): «timeout», «error», «abort» и «parsererror». При возникновении ошибки HTTP errorThrown получает текстовую часть состояния HTTP, например «Не найдено» или «Внутренняя ошибка сервера». Начиная с jQuery 1.5, установка ошибки может принимать массив функций. Каждая функция будет вызываться по очереди. Примечание. Этот обработчик не вызывается для междоменных сценариев и междоменных запросов JSONP.
источник
источник
Создайте новое исключение на сервере, используя:
Response.StatusCode = 500
Response.StatusDescription = ex.Message ()
Я считаю, что StatusDescription возвращается в вызов Ajax ...
Пример:
источник
Несмотря на то, что прошло много лет с тех пор, как этот вопрос был задан, я все еще не могу найти
xhr.responseText
тот ответ, который искал. Он вернул мне строку в следующем формате:который я определенно не хочу показывать пользователям. Я искал что-то вроде ниже:
xhr.responseJSON.message
дает мне точное сообщение от объекта Json, которое может быть показано пользователям.источник
Если есть какая-либо форма, отправьте с подтверждением
просто используйте остальную часть кода
... ... });
источник
Сначала нам нужно установить <serviceDebug includeExceptionDetailInFaults = "True" /> в web.config:
В дополнение к этому на уровне jquery в части ошибки необходимо проанализировать ответ об ошибке, который содержит исключение, например:
Затем, используя r.Message, вы можете фактически показать текст исключения.
Проверьте полный код: http://www.codegateway.com/2012/04/jquery-ajax-handle-exception-thrown-by.html
источник