Eu tenho a seguinte chamada ajax e se houver erro, eu tenho uma mensagem de erro padrão armazenada em uma constante que irei usar se a resposta não contiver uma mensagem personalizada. Quando olho para isso, fico pensando que poderia ser feito melhor. Alguém pode sugerir como posso fazer melhor?

function requestService(){ $.ajax({ dataType: "json", type: "POST", url: "/myurl", contentType: CONTENT_TYPE, timeout: AJAX_TIMEOUT, success: function(data, textStatus, jqXHR){ populateData(JSON.parse(jqXHR.responseText)) }, error: function(err){ var errorMessage = AJAX_ERROR; try { errorMessage = JSON.parse(err.responseText).messages.messages[0].description; } catch(error) { //There was an problem finding an error message from the server. The default message will be used. } displayError(errorMessage) }, complete: function(){ console.log("complete"); } }); }; 

Comentários

  • Bem-vindo à revisão do código! Mudei seu título para dizer melhor o que o código faz, em vez de que você ' gostaria de melhorá-lo (que ' é o toda a intenção do site, afinal). Espero que você obtenha ótimas respostas!

Resposta

Eu diria que é basicamente por- já o livro, mas você pode usar o bloco catch para definir o padrão:

error: function(err){ var errorMessage; try { errorMessage = JSON.parse(err.responseText).messages.messages[0].description; } catch(exception) { errorMessage = AJAX_ERROR; } displayError(errorMessage); } 

Ou você pode usar a formulação try...catch...finally completa, se quiser:

error: function(err){ var errorMessage; try { errorMessage = JSON.parse(err.responseText).messages.messages[0].description; } catch(exception) { errorMessage = AJAX_ERROR; } finally { displayError(errorMessage); } } 

Ou você pode tentar obter a mensagem de erro personalizada , e padronizando apenas no último momento:

error: function(err){ var errorMessage; try { errorMessage = JSON.parse(err.responseText).messages.messages[0].description; } catch(exception) { // ignored } displayError(errorMessage || AJAX_ERROR); } 

A possível vantagem disso, é que se o servidor por qualquer motivo enviar um espaço em branco (false “y) mensagem de erro o padrão acima ainda será a mensagem de erro genérica, mesmo que nenhuma exceção tenha sido lançada.

Em qualquer caso, a abordagem geral parece OK para mim. Não há realmente uma maneira mais limpa de obter o servidor “mensagem de erro, uma vez que você precisa analisar o JSON e cavar fundo na estrutura. Qualquer coisa pode lançar exceções, então try...catch é a maneira mais simples de lidar com isso. No mínimo, você precisa do try..catch para JSON.parse de qualquer maneira, então você também pode usá-lo para ambas as coisas.

Comentários

  • Obrigado, essas são algumas sugestões úteis e me sinto mais confiante por ter olhado para elas também!

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *