Am următorul apel ajax și dacă erorile, am un mesaj de eroare implicit stocat într-o constantă pe care o voi folosi dacă răspunsul nu conține un mesaj personalizat. Când mă uit la asta, mă tot gândesc că se poate face mai bine. Poate cineva să sugereze cum o pot face mai bine?

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

Comentarii

  • Bun venit la Code Review! V-am schimbat titlul pentru a spune mai bine ce face codul, mai degrabă decât pentru ' care doriți să îl îmbunătățiți (' este întreaga intenție a site-ului, la urma urmei). Sper că veți obține niște răspunsuri grozave!

Răspuns

Aș spune că este cam aproape de- cartea deja, dar puteți utiliza blocul catch pentru a seta valoarea implicită:

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

Sau, tu puteți utiliza formularea completă try...catch...finally, dacă doriți:

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

Sau puteți încerca să primiți mesajul de eroare personalizat , și implicit doar în ultimul moment:

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

Posibilul avantaj al acestui lucru este că dacă serverul, din orice motiv, trimite un gol (fals „y) mesajul de eroare de mai sus va fi în mod implicit mesajul de eroare generic, chiar dacă nu au fost aruncate excepții.

În orice caz, abordarea generală mi se pare OK. Nu există o modalitate mai curată de a obține serverul „Mesajul de eroare, deoarece trebuie să analizați JSON și săpați adânc în structură. Orice lucru poate arunca excepții, deci try...catch este cel mai simplu mod de manevrând asta. Cel puțin aveți nevoie de try..catch pentru JSON.parse oricum, așa că l-ați putea folosi la fel pentru ambele lucruri.

Comentarii

  • Vă mulțumim, acestea sunt câteva sugestii utile și mă simt mai încrezător că am avut și o altă pereche de ochi!

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *