Array
(
)

return exception in alert javascript

João Viana
   - 29 jan 2016

Bom dia a todos.
Estou tendo problemas para retornar a mensagem de exceção ocorrida em requisição ajax em um alert do javascript.
Só consigo ver o erro no modo debbug, pois o retorno no alert é [object: object]
#Código
public JsonResult CancelarVenda(string pArr)
{
try
{
string strRet = "", strUsuario = Session["Login_Id"].ToString();
int iQtd = 0;
string[] str = pArr.Split(',');
Intraflex01.Models.VendasCompos20 vendas = new Models.VendasCompos20();
for (int i = 0; i < str.Length; i++)
{
strRet = str[i].Replace("[", "").Replace("\"", "").Replace("]", "");
var query = string.Format(@"INSERT INTO SGV.dbo.VendasCompos20Canc(idVendasCompos20) VALUES({0})", strRet);
Intraflex01.Models.SqlCommands.ExecuteNonQuery(query, null, Intraflex01.Models.SqlCommands.Conexao.SGV);
try
{
if (vendas.CancelaSAP(strRet, strUsuario))
{
iQtd++;
}
}
catch
{
query = string.Format(@"DELETE FROM SGV.dbo.VendasCompos20Canc WHERE idVendasCompos20 = {0}", strRet);
Intraflex01.Models.SqlCommands.ExecuteNonQuery(query, null, Intraflex01.Models.SqlCommands.Conexao.SGV);
throw;
}
}
return Json(iQtd, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
throw ex;
}
}

#Código
$.ajax({
type: "POST",
dataType: "json",
url: "/VendasCompos20/CancelarVenda/",
data: { pArr: JSON.stringify(arr) },
success: function (data) {
alert("Processo realizado com sucesso. Quantidade cancelada: " + data);
window.location.reload();
},
error: function (error) {
alert("Error ao realizar o processo: " + error);
}
});

após isso fiz um teste incluindo o try catch
#Código
try {
$.ajax({
type: "POST",
dataType: "json",
url: "/VendasCompos20/CancelarVenda/",
data: { pArr: JSON.stringify(arr) },
success: function (data) {
alert("Processo realizado com sucesso. Quantidade cancelada: " + data);
window.location.reload();
},
error: function (error) {
alert("Error ao realizar o processo: " + error);
}
});
} catch (e) {
var message = e.message;
alert("Erro ao executar: " + message);
}

mesmo assim continua retornando o erro genérico, alguém poderia me ajudar a resolver ?

Jothaz
   - 29 jan 2016

Não entendi!

Você quer exibir a mensagem de erro da Exception em alert no JavaScript?

João Viana
   - 29 jan 2016

Sim isso mesmo Jothaz.
Estou tentando retornar a mensagem de erro para exibir para o usuário, porém retorna um erro genérico e não a mensagem correta.

Jothaz
   - 29 jan 2016

Não é usual retornar mensagens de Exception para o usuário final, pois as mensagens são complexas e para o usuário mais complica que esclarece.

É mais profissional, elegante e produtivo você cria um log de erros e retornar mensagens genéricas para o usuário. Para o usuário o que importa é somente que ocorreu o erro e nada mais. A mensagem pode até descrever qual funcionalidade para facilitar o suporte. Mas os detalhes do erro deve ser gravado em um arquivo de log.

O .net possui alguns componentes free para este controle de log tipo log4net e nLog. São muito simples de usar e lhe dará um controle total sobre tudo que retornar erro.

João Viana
   - 29 jan 2016

Sim. é que na funcionalidade que estou utilizando faço uma chamada WCF, cuja algumas situação tem o retorno com um new Exception.

#Código
if (wsRetorno.Erro)
return true;
else
throw new Exception("Produto não cadastrado, Verifique.");


E preciso retornar essa mensagem

Jothaz
   - 29 jan 2016

É muito difícil sugerir algo sem conhecer todo o cenário.

O problema é que o retorno é objeto e então você deve converter para string.

Tente:

#Código
String(object)

object.toString()



Se o retorno for JSON:

#Código
JSON.stringify(object);


Ou tente usar a função:

#Código
function objToString (obj) {
var str = '';
for (var p in obj) {
if (obj.hasOwnProperty(p)) {
str += p + '::' + obj[p] + '\n';
}
}
return str;
}