Jeg har følgende ajax-opkald, og hvis det fejler, har jeg en standardfejlmeddelelse gemt i en konstant, som jeg vil bruge hvis svaret ikke indeholder en brugerdefineret besked. Når jeg ser på dette, tænker jeg hele tiden på, at det kunne gøres bedre. Kan nogen foreslå, hvordan jeg kan gøre det bedre?
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
- Velkommen til Code Review! Jeg har ændret din titel for bedre at sige, hvad koden gør, snarere end at du ' gerne vil forbedre den (at ' er hele formålet med webstedet, trods alt). Jeg håber, du får nogle gode svar!
Svar
Jeg vil sige, det er stort set ved- bogen allerede, men du kunne bruge catch
-blokken til at indstille 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 bruge den fulde try...catch...finally
formulering, hvis du vil:
error: function(err){ var errorMessage; try { errorMessage = JSON.parse(err.responseText).messages.messages[0].description; } catch(exception) { errorMessage = AJAX_ERROR; } finally { displayError(errorMessage); } }
Eller du kan prøve at få den brugerdefinerede fejlmeddelelse , og kun standard i sidste øjeblik:
error: function(err){ var errorMessage; try { errorMessage = JSON.parse(err.responseText).messages.messages[0].description; } catch(exception) { // ignored } displayError(errorMessage || AJAX_ERROR); }
Den mulige fordel ved dette er, at hvis serveren af en eller anden grund sender et tomt (falsk “y) fejlmeddelelse ovenstående vil stadig være standard til den generiske fejlmeddelelse, selvom der ikke blev kastet nogen undtagelser.
Under alle omstændigheder synes den overordnede tilgang at være OK for mig. Der er ikke rigtig en renere måde at få serveren på “s fejlmeddelelse, da du skal analysere JSON og grave dybt ned i strukturen. Enten ting kan kaste undtagelser, så try...catch
er den enkleste måde at håndtering af det. Som minimum har du brug for try..catch
til JSON.parse
alligevel, så du kan lige så godt bruge det til begge ting.
Kommentarer
- Tak, dette er nogle nyttige forslag, og jeg føler mig mere sikker på at have haft endnu et par øjne på det!