Mám následující volání Ajax, a pokud dojde k chybě, mám výchozí chybovou zprávu uloženou v konstantě, kterou použiji pokud odpověď neobsahuje vlastní zprávu. Když se na to podívám, pořád si myslím, že by se to dalo udělat lépe. Může někdo navrhnout, jak to mohu udělat lépe?

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"); } }); }; 

Komentáře

  • Vítejte v Code Review! Změnil jsem váš název, abych lépe řekl, co kód dělá, než abyste ho ' chtěli vylepšit (' koneckonců celý záměr webu). Doufám, že dostanete skvělé odpovědi!

Odpověď

Řekl bych, že je to do značné míry – knihu již máte, ale můžete použít blok catch a nastavit výchozí:

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

Nebo můžete můžete použít úplnou formulaci try...catch...finally, pokud chcete:

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

Nebo můžete zkusit zobrazit vlastní chybovou zprávu , a výchozí pouze na poslední chvíli:

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

Možnou výhodou je, že pokud server z jakéhokoli důvodu pošle mezeru (false „y“) chybová zpráva výše bude stále výchozí pro obecnou chybovou zprávu, přestože nebyly vyvolány žádné výjimky.

V každém případě se mi celkový přístup zdá být v pořádku. Neexistuje opravdu čistší způsob získání serveru Chybová zpráva, protože musíte analyzovat JSON a hlouběji do struktury. Každá věc může způsobit výjimky, takže try...catch je nejjednodušší způsob manipulace s tím. Minimálně potřebujete try..catch pro JSON.parse, takže jej můžete použít pro obě věci.

Komentáře

  • Děkuji, toto je několik užitečných návrhů a cítím se více sebejistě, když jsem na to viděl i jiné oči!

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *