Jai lappel ajax suivant et en cas derreur, jai un message derreur par défaut stocké dans une constante que jutiliserai si la réponse ne contient pas de message personnalisé. Quand je regarde cela, je narrête pas de penser que cela pourrait être mieux fait. Quelquun peut-il suggérer comment je peux le faire mieux?

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"); } }); }; 

Commentaires

  • Bienvenue dans Code Review! Jai changé votre titre pour mieux dire ce que fait le code, plutôt que de vouloir laméliorer ' (que ' est le lintention totale du site, après tout). Jespère que vous obtiendrez dexcellentes réponses!

Réponse

Je « dirais » que cest à peu près par- le-livre déjà, mais vous pouvez utiliser le bloc catch pour définir la valeur par défaut:

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

Ou, vous pouvez utiliser la formulation complète try...catch...finally, si vous le souhaitez:

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

Ou vous pouvez essayer dobtenir le message derreur personnalisé , et uniquement par défaut au dernier moment:

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

Lavantage possible de ceci, cest que si le serveur pour une raison quelconque envoie un blanc (faux « y) message derreur le message derreur ci-dessus sera toujours par défaut le message derreur générique, même si aucune exception na été levée.

Dans tous les cas, lapproche globale me semble correcte. Il ny a pas vraiment de moyen plus propre dobtenir le serveur « s, car vous devez analyser le JSON et creuser profondément dans la structure. Les deux éléments peuvent générer des exceptions, donc try...catch est le moyen le plus simple de gérer cela. Au minimum, vous avez besoin du try..catch pour JSON.parse de toute façon, vous pouvez donc aussi bien lutiliser pour les deux choses.

Commentaires

  • Merci, ce sont quelques suggestions utiles et je me sens plus confiant davoir eu une autre paire dyeux aussi!

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *