konstans használatával A következő ajax hívásom van, és ha hibás, akkor egy alapértelmezett hibaüzenetet tárolok egy konstansban, amelyet használok ha a válasz nem tartalmaz egyéni üzenetet. Amikor ezt megnézem, folyton arra gondolok, hogy lehetne jobban csinálni. Tudna valaki javaslatot tenni arra, hogyan tudnám jobban csinálni?
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"); } }); };
Megjegyzések
- Üdvözöljük a Code Review oldalán! Megváltoztattam a címet, hogy jobban megmondjam, mit csinál a kód, ahelyett, hogy ' szeretné javítani (hogy ' s a a webhely teljes szándéka). Remélem, remek válaszokat kapsz!
Válasz
Nagyjából azt mondanám, hogy the-book már, de használhatja a catch
blokkot az alapértelmezés beállításához:
error: function(err){ var errorMessage; try { errorMessage = JSON.parse(err.responseText).messages.messages[0].description; } catch(exception) { errorMessage = AJAX_ERROR; } displayError(errorMessage); }
Vagy használhatja a teljes try...catch...finally
megfogalmazást, ha szeretné:
error: function(err){ var errorMessage; try { errorMessage = JSON.parse(err.responseText).messages.messages[0].description; } catch(exception) { errorMessage = AJAX_ERROR; } finally { displayError(errorMessage); } }
Vagy megpróbálhatja megszerezni az egyéni hibaüzenetet , és csak az utolsó pillanatban alapértelmezett:
error: function(err){ var errorMessage; try { errorMessage = JSON.parse(err.responseText).messages.messages[0].description; } catch(exception) { // ignored } displayError(errorMessage || AJAX_ERROR); }
Ennek lehetséges előnye, hogy ha a szerver bármilyen okból üreset (hamis “y” küld) hibaüzenet, a fentiek továbbra is alapértelmezés szerint az általános hibaüzenetet fogják szolgáltatni, annak ellenére, hogy nem adtak kivételt.
Mindenesetre az általános megközelítés számomra rendben van. A szerver megszerzésének nincs igazán tisztább módja. “hibaüzenet, mivel elemeznie kell a JSON-t és mélyre kell ásnia a struktúrát. Bármelyik dolog kivethet, így a try...catch
a legegyszerűbb módja ennek kezelése. Legalább a try..catch
szükséges amúgy a JSON.parse
számára, így mindkét dologra felhasználhatja.
Hozzászólások
- Köszönöm, ezek néhány hasznos javaslat, és úgy érzem, magabiztosabb vagyok, hogy egy másik szemem is rajta volt!