Ich habe den folgenden Ajax-Aufruf und wenn er fehlerhaft ist, habe ich eine Standardfehlermeldung in einer Konstante gespeichert, die ich verwenden werde Wenn die Antwort keine benutzerdefinierte Nachricht enthält. Wenn ich mir das anschaue, denke ich immer wieder, dass es besser gemacht werden könnte. Kann jemand vorschlagen, wie ich es besser machen kann?
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"); } }); };
Kommentare
- Willkommen bei Code Review! Ich habe Ihren Titel geändert, um besser zu sagen, was der Code tut, anstatt dass Sie ' ihn verbessern möchten (das ' ist der schließlich die ganze Absicht der Seite). Ich hoffe, Sie erhalten einige großartige Antworten!
Antwort
Ich würde sagen, es ist ziemlich vorbei. the-book bereits, aber Sie können den Block catch
verwenden, um den Standard festzulegen:
error: function(err){ var errorMessage; try { errorMessage = JSON.parse(err.responseText).messages.messages[0].description; } catch(exception) { errorMessage = AJAX_ERROR; } displayError(errorMessage); }
Oder Sie Sie können die vollständige try...catch...finally
-Formulierung verwenden, wenn Sie möchten:
error: function(err){ var errorMessage; try { errorMessage = JSON.parse(err.responseText).messages.messages[0].description; } catch(exception) { errorMessage = AJAX_ERROR; } finally { displayError(errorMessage); } }
Oder Sie können versuchen, die benutzerdefinierte Fehlermeldung abzurufen und nur im letzten Moment standardmäßig:
error: function(err){ var errorMessage; try { errorMessage = JSON.parse(err.responseText).messages.messages[0].description; } catch(exception) { // ignored } displayError(errorMessage || AJAX_ERROR); }
Der mögliche Vorteil davon ist, dass der Server aus irgendeinem Grund ein Leerzeichen sendet (false „y) Fehlermeldung Die obige Fehlermeldung wird weiterhin standardmäßig mit der allgemeinen Fehlermeldung verwendet, obwohl keine Ausnahmen ausgelöst wurden.
Auf jeden Fall scheint mir der allgemeine Ansatz in Ordnung zu sein. Es gibt keine wirklich sauberere Möglichkeit, den Server zu erhalten „s Fehlermeldung, da Sie JSON analysieren und tief in die Struktur graben müssen. Beide Dinge können Ausnahmen auslösen, daher ist try...catch
der einfachste Weg damit umgehen. Zumindest benötigen Sie die try..catch
für JSON.parse
, sodass Sie sie auch für beide Zwecke verwenden können.
Kommentare
- Danke, dies sind einige hilfreiche Vorschläge, und ich bin sicherer, dass ich auch noch ein paar Augen darauf hatte!