Ik heb de volgende ajax-aanroep en als er een fout optreedt, heb ik een standaardfoutbericht opgeslagen in een constante die ik zal gebruiken als het antwoord geen aangepast bericht bevat. Als ik hiernaar kijk, blijf ik denken dat het beter kan. Kan iemand voorstellen hoe ik het beter kan doen?
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"); } }); };
Reacties
- Welkom bij Code Review! Ik heb je titel gewijzigd om beter te kunnen zeggen wat de code doet, in plaats van dat je ' het wilt verbeteren (dat ' de de hele bedoeling van de site). Ik hoop dat je geweldige antwoorden krijgt!
Antwoord
Ik zou zeggen dat het zo ongeveer voorbij is het boek al, maar je zou het catch
blok kunnen gebruiken om de standaard in te stellen:
error: function(err){ var errorMessage; try { errorMessage = JSON.parse(err.responseText).messages.messages[0].description; } catch(exception) { errorMessage = AJAX_ERROR; } displayError(errorMessage); }
Of je kan de volledige try...catch...finally
-formulering gebruiken, als u dat wilt:
error: function(err){ var errorMessage; try { errorMessage = JSON.parse(err.responseText).messages.messages[0].description; } catch(exception) { errorMessage = AJAX_ERROR; } finally { displayError(errorMessage); } }
Of u kunt proberen de aangepaste foutmelding te krijgen , en alleen op het laatste moment in gebreke gebleven:
error: function(err){ var errorMessage; try { errorMessage = JSON.parse(err.responseText).messages.messages[0].description; } catch(exception) { // ignored } displayError(errorMessage || AJAX_ERROR); }
Het mogelijke voordeel hiervan is dat als de server om welke reden dan ook een blanco (false “y) foutmelding het bovenstaande zal nog steeds standaard de generieke foutmelding zijn, ook al zijn er geen uitzonderingen gegenereerd.
In ieder geval lijkt de algehele aanpak mij oké. Er is niet echt een schonere manier om de server te krijgen “s foutmelding, aangezien je de JSON en diep in de structuur moet parseren. Elk ding kan uitzonderingen opleveren, dus try...catch
is de eenvoudigste manier om omgaan met dat. Je hebt in ieder geval de try..catch
voor JSON.parse
nodig, dus je kunt het net zo goed voor beide dingen gebruiken.
Opmerkingen
- Bedankt, dit zijn enkele nuttige suggesties en ik heb er meer vertrouwen in dat ik er ook nog een paar ogen op heb gehad!