Existe alguma maneira de mostrar mensagens de exceção personalizadas como um alerta na minha mensagem de erro do jQuery AJAX?
Por exemplo, se eu quiser lançar uma exceção no lado do servidor via Struts by throw new ApplicationException("User name already exists");
, desejo capturar esta mensagem ('nome de usuário já existe') na mensagem de erro do 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);
}
});
}
});
No segundo alerta, onde alerta o erro lançado, estou recebendo undefined
e o código de status é 500.
Não sei ao certo onde estou errado. O que posso fazer para corrigir esse problema?
jquery
ajax
custom-exceptions
Roman C
fonte
fonte
xhr.responseJSON
. : DControlador:
Ver script:
fonte
response.StatusCode = (int)HttpStatusCode.InternalServerError;
eresponse.StatusDescription = filterContext.Exception.Message;
ServerSide:
ClientSide:
Tratamento genérico de erros do Ajax
Se eu precisar fazer algum tratamento de erro genérico para todas as solicitações de ajax. Definirei o manipulador ajaxError e exibirei o erro em uma div chamada errorcontainer na parte superior do conteúdo html.
fonte
Você precisa converter o
responseText
arquivo para JSON. Usando JQuery:fonte
Se você fizer uma chamada para o asp.net, isso retornará o título da mensagem de erro:
Eu não escrevi todo o formatErrorMessage, mas acho muito útil.
fonte
Foi o que fiz e funciona até agora em um aplicativo MVC 5.
O tipo de retorno do controlador é ContentResult.
E no lado do cliente é assim que a função ajax se parece
fonte
Se alguém estiver aqui, como em 2016, para obter a resposta, use o
.fail()
tratamento de erros como.error()
descontinuado no jQuery 3.0Espero que ajude
fonte
jqXHR.error()
foi descontinuado (realmente removido) no jQuery 3.0, mas os retornos de chamadaerror
e não foram descontinuados, tanto quanto eu sei.success
$.ajax()
Uma solução geral / reutilizável
Esta resposta é fornecida para referência futura a todos aqueles que se deparam com esse problema. A solução consiste em duas coisas:
ModelStateException
que é lançada quando a validação falha no servidor (o estado do modelo relata erros de validação quando usamos anotações de dados e usamos parâmetros de ação do controlador de tipo forte)HandleModelStateExceptionAttribute
que captura a exceção customizada e retorna o status de erro HTTP com o erro de estado do modelo no corpoIsso fornece a infraestrutura ideal para que as chamadas do jQuery Ajax usem todo o seu potencial com
success
eerror
manipuladores.Código do lado do cliente
Código do lado do servidor
Todo o problema está detalhado nesta postagem do blog, onde você encontra todo o código para executar isso no seu aplicativo.
fonte
Achei isso legal, porque eu podia analisar a mensagem que estava enviando do servidor e exibir uma mensagem amigável para o usuário sem o rastreamento de pilha ...
fonte
tal como
fonte
Provavelmente, isso é causado pelos nomes dos campos JSON sem aspas.
Altere a estrutura JSON de:
para:
fonte
Acredito que o manipulador de resposta do Ajax use o código de status HTTP para verificar se houve um erro.
Portanto, se você apenas lançar uma exceção Java no código do lado do servidor, mas a resposta HTTP não tiver um código de status 500 jQuery (ou, nesse caso, provavelmente o XMLHttpRequest objeto ) assumirá que tudo estava bem.
Estou dizendo isso porque tive um problema semelhante no ASP.NET, onde estava lançando algo como uma ArgumentException ("Não sei o que fazer ..."), mas o manipulador de erros não estava disparando.
Em seguida, defino
Response.StatusCode
500 ou 200, independentemente de ter ou não um erro.fonte
jQuery.parseJSON é útil para obter sucesso e erro.
fonte
Você tem um objeto JSON da exceção lançada, no objeto xhr. Apenas use
O objeto JSON expõe duas outras propriedades: 'ExceptionType' e 'StackTrace'
fonte
Essa função basicamente gera chaves de API aleatórias exclusivas e, caso contrário, a caixa de diálogo pop-up com mensagem de erro será exibida.
Na Página de Visualização:
Do Controlador:
O parâmetro opcional de retorno de chamada especifica uma função de retorno de chamada a ser executada quando o método load () for concluído. A função de retorno de chamada pode ter parâmetros diferentes:
Uma função a ser chamada se a solicitação falhar. A função recebe três argumentos: O objeto jqXHR (no jQuery 1.4.x, XMLHttpRequest), uma sequência que descreve o tipo de erro que ocorreu e um objeto de exceção opcional, se houver. Os valores possíveis para o segundo argumento (além de nulo) são "timeout", "error", "abort" e "parsererror". Quando ocorre um erro HTTP, errorThrown recebe a parte textual do status HTTP, como "Não encontrado" ou "Erro interno do servidor". A partir do jQuery 1.5, a configuração de erro pode aceitar uma matriz de funções. Cada função será chamada por sua vez. Nota: Este manipulador não é chamado para solicitações de script entre domínios e JSONP entre domínios.
fonte
fonte
Lance uma nova exceção no servidor usando:
Response.StatusCode = 500
Response.StatusDescription = ex.Message ()
Acredito que o StatusDescription retorne à chamada do Ajax ...
Exemplo:
fonte
Embora já se passaram muitos anos desde que essa pergunta foi feita, ainda não encontro
xhr.responseText
a resposta que estava procurando. Ele me retornou uma string no seguinte formato:o que eu definitivamente não quero mostrar aos usuários. O que eu estava procurando é algo como abaixo:
xhr.responseJSON.message
dá-me a mensagem exata do objeto Json que pode ser mostrada aos usuários.fonte
Se houver algum formulário é enviado com validar
basta usar o restante do código
... ... });
fonte
Primeiro, precisamos definir <serviceDebug includeExceptionDetailInFaults = "True" /> no web.config:
Além do que no nível do jquery na parte do erro, você precisa analisar a resposta de erro que contém uma exceção como:
Em seguida, usando r.Message, você pode realmente mostrar o texto da exceção.
Verifique o código completo: http://www.codegateway.com/2012/04/jquery-ajax-handle-exception-thrown-by.html
fonte