Jeg har følgende ajax-samtale, og hvis det feiler, har jeg en standard feilmelding lagret i en konstant som jeg vil bruke hvis svaret ikke inneholder en tilpasset melding. Når jeg ser på dette, tenker jeg stadig at det kan gjøres bedre. Kan noen foreslå hvordan jeg kan gjø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 endret tittelen din for å si bedre hva koden gjør, i stedet for at du ' vil forbedre den (at ' er hele hensikten med nettstedet, tross alt). Jeg håper du får noen gode svar!

Svar

Jeg vil si at det er ganske mye av- boken allerede, men du kan bruke catch -blokken til å angi 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 bruke den fullstendige try...catch...finally -formuleringen, 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 å få den tilpassede feilmeldingen , og bare misligholder i siste øyeblikk:

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

Den mulige fordelen med dette er at hvis serveren av en eller annen grunn sender et tomt (usant «y) feilmeldingen ovenfor vil fremdeles være standard til den generiske feilmeldingen, selv om det ikke ble kastet noen unntak.

Under alle omstendigheter virker den totale tilnærmingen OK for meg. Det er egentlig ikke en renere måte å få serveren på «s feilmelding, siden du må analysere JSON og grave dypt inn i strukturen. Enten kan ting kaste unntak, så try...catch er den enkleste måten å håndtering av det. I det minste trenger du try..catch for JSON.parse uansett, så du kan like godt bruke den til begge ting.

Kommentarer

  • Takk, dette er noen nyttige forslag, og jeg føler meg tryggere på at jeg også har hatt et par øyne til!

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *