Mam następujące wywołanie AJAX i jeśli wystąpi błąd, mam domyślny komunikat o błędzie przechowywany w stałej, którego użyję jeśli odpowiedź nie zawiera niestandardowego komunikatu. Kiedy na to patrzę, myślę, że można to zrobić lepiej. Czy ktoś może podpowiedzieć, jak mogę to zrobić lepiej?

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

Komentarze

  • Witamy w przeglądzie kodu! Zmieniłem Twój tytuł, aby lepiej opisywał działanie kodu, zamiast tego, ' chciałbyś go ulepszyć (' to w końcu cały zamiar witryny). Mam nadzieję, że otrzymujesz świetne odpowiedzi!

Odpowiedź

Powiedziałbym, że to prawie przez- książka jest już dostępna, ale możesz użyć bloku catch, aby ustawić wartość domyślną:

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

Lub możesz jeśli chcesz, możesz użyć pełnego wyrażenia try...catch...finally:

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

Możesz też spróbować uzyskać niestandardowy komunikat o błędzie i domyślną tylko w ostatniej chwili:

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

Możliwa zaleta jest taka, że jeśli serwer z jakiegoś powodu wysyła puste miejsce (false „y) powyższy komunikat o błędzie będzie nadal domyślnie generycznym komunikatem o błędzie, mimo że nie zostały zgłoszone żadne wyjątki.

W każdym razie ogólne podejście wydaje mi się w porządku. Nie ma tak naprawdę czystszego sposobu na uzyskanie serwera ”, ponieważ musisz przeanalizować JSON i zagłębić się w strukturę. Każda rzecz może generować wyjątki, więc try...catch jest najprostszym sposobem radzenie sobie z tym. Jako minimum potrzebujesz try..catch dla JSON.parse i tak, więc równie dobrze możesz go używać do obu rzeczy.

Komentarze

  • Dzięki, to kilka pomocnych sugestii i czuję się pewniej, mając na to kolejną parę oczu!

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *