Jag har följande ajax-samtal och om det fel, har jag ett standardfelmeddelande lagrat i en konstant som jag kommer att använda om svaret inte innehåller ett anpassat meddelande. När jag tittar på detta tänker jag hela tiden att det skulle kunna göras bättre. Kan någon föreslå hur jag kan göra det bättre?
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"); } }); };
Kommentarer
- Välkommen till kodgranskning! Jag har ändrat din titel för att bättre säga vad koden gör, snarare än att du ' vill förbättra den (att ' är webbplatsens hela avsikt, trots allt). Jag hoppas att du får några bra svar!
Svar
Jag skulle säga att det är ganska mycket av- boken redan, men du kan använda blocket catch
för att ställa in standard:
error: function(err){ var errorMessage; try { errorMessage = JSON.parse(err.responseText).messages.messages[0].description; } catch(exception) { errorMessage = AJAX_ERROR; } displayError(errorMessage); }
Eller du kan använda den fullständiga try...catch...finally
-formuleringen om du vill:
error: function(err){ var errorMessage; try { errorMessage = JSON.parse(err.responseText).messages.messages[0].description; } catch(exception) { errorMessage = AJAX_ERROR; } finally { displayError(errorMessage); } }
Eller så kan du försöka få det anpassade felmeddelandet , och endast standard i sista stund:
error: function(err){ var errorMessage; try { errorMessage = JSON.parse(err.responseText).messages.messages[0].description; } catch(exception) { // ignored } displayError(errorMessage || AJAX_ERROR); }
Den möjliga fördelen med detta är att om servern av någon anledning skickar en tom (falsk ”y) felmeddelandet ovan kommer fortfarande att vara det generiska felmeddelandet, även om inga undantag kastades.
Under alla omständigheter verkar den övergripande metoden OK för mig. ”s felmeddelande, eftersom du måste analysera JSON och gräva djupt in i strukturen. Antingen saker kan kasta undantag, så try...catch
är det enklaste sättet att hanterar det. Du behöver åtminstone try..catch
för JSON.parse
ändå, så du kan lika gärna använda den för båda sakerna.
Kommentarer
- Tack, det här är några användbara förslag och jag känner mig mer självsäker efter att ha fått ett nytt par ögon också på det!