다음과 같은 ajax 호출이 있으며 오류가 발생하면 사용할 상수에 기본 오류 메시지가 저장되어 있습니다. 응답에 사용자 지정 메시지가없는 경우 이걸 보면 더 잘할 수 있다고 생각 해요. 누구든지 내가 어떻게 더 잘 할 수 있는지 제안 할 수 있습니까?

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

설명

  • 코드 검토에 오신 것을 환영합니다! 코드를 개선하고 싶은 것보다 ' 코드의 기능을 더 잘 표현하도록 제목을 변경했습니다 (' 결국 사이트의 전체 의도). 좋은 답변을 얻으 셨기를 바랍니다.

답변

대부분 책에 이미 있지만 catch 블록을 사용하여 기본값을 설정할 수 있습니다.

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

또는 원하는 경우 전체 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); } } 

또는 사용자 지정 오류 메시지를받을 수 있습니다. , 마지막 순간에만 기본값 설정 :

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

이것의 가능한 이점은 서버가 어떤 이유로 든 공백 (false “y)을 보내는 경우입니다. 오류 메시지는 예외가 발생하지 않았음에도 불구하고 여전히 일반 오류 메시지로 기본 설정됩니다.

어쨌든 전반적인 접근 방식은 나에게 괜찮아 보입니다. 서버를 얻는 더 깨끗한 방법은 없습니다. “의 오류 메시지입니다. JSON을 파싱하고 구조를 자세히 조사해야하기 때문입니다. 어느 쪽이든 예외가 발생할 수 있으므로 try...catch가 가장 간단한 방법입니다. 처리합니다. 어쨌든 JSON.parse에는 최소한 try..catch가 필요하므로 두 가지 모두에 사용하는 것이 좋습니다.

의견

  • 감사합니다. 몇 가지 유용한 제안 사항이 있으며 또 다른 시각을 갖게 된 것이 더 자신감이 있습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다