jQuery.ajax() 사용 시 오류는 어떻게 처리합니까?
jQuery의 ajax 메서드를 사용하여 폼 데이터를 제출할 때 오류를 처리하는 가장 좋은 방법은 무엇입니까?콜의 예를 다음에 나타냅니다.
$.ajax({
url: "userCreation.ashx",
data: { u:userName, p:password, e:email },
type: "POST",
beforeSend: function(){disableSubmitButton();},
complete: function(){enableSubmitButton();},
error: function(xhr, statusText, errorThrown){
// Work out what the error was and display the appropriate message
},
success: function(data){
displayUserCreatedMessage();
refreshUserList();
}
});
중복된 사용자 이름, 중복된 전자 메일 주소 등과 같은 여러 가지 이유로 요청이 실패할 수 있으며 ashx는 이러한 경우 예외를 발생시키도록 기록됩니다.
내 문제는 예외를 둠으로써 ashx가 원인이라는 것이다.statusText
그리고.errorThrown
정의되지 않습니다.
제가 갈 수 있는 건드릴 수 있는XMLHttpRequest.responseText
표준 .net 오류 페이지를 구성하는HTML 이 포함되어 있습니다.
responseText에서 페이지 제목을 찾아 제목을 사용하여 어떤 오류가 발생했는지 확인하고 있습니다.커스텀 에러 처리를 유효하게 하면, 이 에러가 발생할 가능성이 있습니다.
에러를 ashx에 넣어야 합니까?아니면 콜에 의해 반환된 데이터의 일부로 상태 코드를 반환해야 합니까?userCreation.ashx
어떤 조치를 취해야 할지 결정하기 위해 이것을 사용한다면?
당신은 이러한 상황에 어떻게 대처합니까?
디버깅을 위해서는 보통 요소(아래의 경우)를 작성하기만 하면 됩니다).<div id="error"></div>
) 페이지에서 XmlHttpRequest를 작성합니다.
error: function (XMLHttpRequest, textStatus, errorThrown) {
$("#error").html(XMLHttpRequest.status + "\n<hr />" + XMLHttpRequest.responseText);
}
그런 다음 발생한 오류 유형을 확인하고 올바르게 캡처할 수 있습니다.
if (XMLHttpRequest.status === 404) // display some page not found error
if (XMLHttpRequest.status === 500) // display some server error
ashx에서 새로운 예외(예: "Invalid User" 등)를 발생시킨 후 이를 해석하여XMLHttpRequest.responseText
저는 에러가 났을 때XMLHttpRequest.responseText
표준 ASP가 아닙니다.Net error 페이지에는 다음과 같은 오류가 포함된 JSON 개체입니다.
{
"Message":"Index was out of range. Must be non-negative and less than the size of the collection.\r\n
Parameter name: index",
"StackTrace":" at System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)\r\n
at etc...",
"ExceptionType":"System.ArgumentOutOfRangeException"
}
편집: 호출하는 함수가 다음 속성으로 표시되어 있기 때문일 수 있습니다.
<WebMethod()> _
<ScriptMethod()> _
ashx 에 에러를 던질까요?아니면 콜에 의해 반환된 데이터의 일부로서 userCreation.ashx 에 상태 코드를 반환하고 나서, 이것을 사용해 실행할 액션을 결정할까요?당신은 이러한 상황에 어떻게 대처합니까?
개인적으로는 가능하다면 서버측에서 대응하고, 거기서 유저에게 메세지를 전달하고 싶습니다.이 방법은 사용자에게 무슨 일이 일어났는지 알려주는 메시지(기본적으로 확인 메시지)만 표시하는 시나리오에서 매우 효과적입니다.
단, 서버에서 발생한 일에 따라 액션을 수행할 경우 상태 코드를 사용하여 javascript를 작성하여 해당 상태 코드를 기반으로 다양한 액션을 수행할 수 있습니다.
이제 어떤 대답을 받아들여야 할지 고민이다.
그 문제에 대해 더 생각해 보니 내가 예외를 잘못 제기하고 있다는 결론을 내리게 되었다.중복된 사용자 이름, 이메일 주소 등은 등록 프로세스에서 예상되는 문제이므로 예외가 아니라 단순한 오류입니다.이 경우 예외를 두지 말고 에러 코드를 반환해야 합니다.
이 경우 irobinson의 접근방식이 가장 적합하다고 생각합니다.특히 폼은 표시되는 UI의 극히 일부에 불과하기 때문입니다.이것으로 이 솔루션을 실장하고 상태 및 표시되는 옵션메시지를 포함한 xml을 반환합니다.그런 다음 jQuery를 사용하여 해석하고 적절한 조치를 취할 수 있습니다. -
success: function(data){
var created = $("result", data).attr("success");
if (created == "OK"){
resetNewUserForm();
listUsers('');
} else {
var errorMessage = $("result", data).attr("message");
$("#newUserErrorMessage").text(errorMessage).show();
}
enableNewUserForm();
}
그러나 Travis의 답변은 매우 상세하며 디버깅 중에 또는 사용자에게 예외 메시지를 표시하고 싶은 경우에 적합합니다.저는 JSON을 돌려받지 못하기 때문에 아마 Travis가 리스트한 속성 중 하나일 것입니다.코드에 JSON이 없기 때문입니다.
(irobinson의 대답은 받아들이겠지만 Travis의 대답은 찬성표를 던진다.가장 많은 표를 얻지 못한 답변을 받아들이는 것이 이상할 뿐입니다.)
언급URL : https://stackoverflow.com/questions/28529/how-would-you-handle-errors-when-using-jquery-ajax
'programing' 카테고리의 다른 글
개체가 React 하위 개체로 유효하지 않습니다(찾은 개체: [object Promise]). (0) | 2023.03.11 |
---|---|
ng-init으로 설정된 변수가 AngularJS의 $scope에서 정의되지 않은 이유는 무엇입니까? (0) | 2023.03.11 |
ngSrc 경로가 404로 해결된 경우 기본값으로 폴백하는 방법이 있습니까? (0) | 2023.03.11 |
useContext를 사용하여 컨텍스트 값을 변경하려면 어떻게 해야 합니까? (0) | 2023.03.11 |
워드프레스 215에서 구글 폰트를 삭제하거나 큐를 해제하는 방법 (0) | 2023.03.11 |