Minulla on seuraava ajax-kutsu ja jos se virhe, minulla on oletusvirhesanoma tallennettu vakioon, jota käytän jos vastaus ei sisällä mukautettua viestiä. Kun katson tätä, ajattelen, että se voidaan tehdä paremmin. Voiko kukaan ehdottaa, miten voin tehdä sen paremmin?
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"); } }); };
kommentit
- Tervetuloa Code Review -sovellukseen! Olen vaihtanut otsikkosi sanoen paremmin koodin tekemisen sen sijaan, että ' haluaisit parantaa sitä (että ' s koko sivuston tarkoitus). Toivon, että saat hienoja vastauksia!
Vastaa
Sanoisin sen melko paljon – the-book jo, mutta voit käyttää catch
-lohkoa asettamaan oletuksen:
error: function(err){ var errorMessage; try { errorMessage = JSON.parse(err.responseText).messages.messages[0].description; } catch(exception) { errorMessage = AJAX_ERROR; } displayError(errorMessage); }
Tai voit voi käyttää koko try...catch...finally
-formulaatiota, jos haluat:
error: function(err){ var errorMessage; try { errorMessage = JSON.parse(err.responseText).messages.messages[0].description; } catch(exception) { errorMessage = AJAX_ERROR; } finally { displayError(errorMessage); } }
Tai voit yrittää saada mukautetun virhesanoman ja oletuksena vain viime hetkellä:
error: function(err){ var errorMessage; try { errorMessage = JSON.parse(err.responseText).messages.messages[0].description; } catch(exception) { // ignored } displayError(errorMessage || AJAX_ERROR); }
Tämän mahdollinen etu on, että jos palvelin jostain syystä lähettää tyhjän (väärä ”y”) Yllä oleva virheilmoitus on edelleen oletusarvoisesti yleinen virheilmoitus, vaikka mitään poikkeuksia ei tehty.
Joka tapauksessa yleinen lähestymistapa vaikuttaa minusta OK. Ei ole oikeastaan puhtaampaa tapaa saada palvelin ”virhesanoma, koska sinun on jäsennettävä JSON ja kaivettava syvälle rakenteeseen. Kumpikin asia saattaa aiheuttaa poikkeuksia, joten try...catch
on yksinkertaisin tapa sen käsittely. Tarvitset vähintään try..catch
JSON.parse
-tuotteelle joka tapauksessa, joten voit käyttää sitä myös molempiin asioihin.
Kommentit
- Kiitos, nämä ovat hyödyllisiä ehdotuksia, ja olen varmempi siitä, että minulla on ollut toinen silmäpari!