반응형
ajax 통신은 비동기식 통신입니다.
onsubmit 이벤트에서 ajax 통신을 할 때, ajax 통신 결과와는 상관없이 submit 처리를 합니다.
그래서 async: false 와 event.preventDefault(); 로 처리를 할 수 있습니다.
이렇게 하게 하면 ajax 통신 결과 리턴 시간이 지연 될 것을 감안하여 올리는 로딩바가 구현이 되지 않습니다.
이 경우에는 로딩바를 먼저 노출되도록 처리를 하고 ajax 통신을 setTimeout과 결합하여 사용하면 로딩바가 나오게 됩니다.
최종적으로 ajax 통신 결과가 성공 일 때 submit이 안되는 현상이 발생을 하였습니다.
이 현상의 해법은 $.when($.ajax()).done().fail()과 currentTarget.submit()입니다.
며칠 동안 포스팅 했던 내용의 완결판입니다.
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<form name="theForm" action="" method="post" id="theForm">
<input type="submit" />
</form>
<script>
$('#theForm').submit(function(event){
// 자동 submit을 시키는 것을 막는다.
event.preventDefault();
/**
* 입력 필드 validattion check 로직
*/
/**
* ajax로 다른 페이지를 처리 후에 결과가 성공일 때 전송 처리를 한다.
*/
// ajax 통신을 설정합니다.
var when =
$.ajax({
url:'[주소]',
type:'post',
data:$('form').serialize(),
dataType:'json'
});
// 로딩바를 보여 준다.
$('#loadimg').css('display','block');
$.when(when)
.done(function(data)
{
var message = data.message;
if ( message == 'Success' )
{
//console.log('success');
// 성공일 때 form submit을 합니다.
event.currentTarget.submit();
}
else
{
// 안내 메시지를 보여준다.
alert('안내 메시지');
// 에러가 발생하면 모달창을 닫는다.
$('#모달창 id').modal('hide');
}
})
.fail(function(request, status, error)
{
// 통신 실패하였을 때
console.log("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
// 안내 메시지를 보여준다.
alert('안내 메시지');
// 에러가 발생하면 모달창을 닫는다.
$('#모달창 id').modal('hide');
})
.always(function (data, status, responseObj)
{
// 성공 실패와 상관 없이 항상 처리를 하는 내용을 담습니다.
//console.log(data);
// 로딩바를 해제한다.
$('#loadimg').css('display','none');
});
})
</script>
</body>
</html>
2020/03/05 - [유용한 활용팁] - Javascript ajax async: false (동기식) 처리 시 로딩바 구현 방법.
2020/03/04 - [유용한 활용팁] - Javascript jquery submit 이벤트 시 submit 제어하기
2020/03/03 - [유용한 활용팁] - Javascript Form onsubmit 이벤트 시 ajax 결과에 따라서 전송 처리하기 - async: false
반응형
'유용한 활용팁' 카테고리의 다른 글
파이썬 웹 연동 기초 HTML 페이지 만들기 (0) | 2020.03.12 |
---|---|
리눅스 tail -f |grep -wi 로 특정 단어가 포함된 행만 출력하게 하기 (0) | 2020.03.10 |
Javascript ajax async: false (동기식) 처리 시 로딩바 구현 방법 (5) | 2020.03.05 |
Javascript jquery submit 이벤트 시 submit 제어하기 (2) | 2020.03.04 |
Javascript Form onsubmit 이벤트 시 ajax 결과에 따라서 전송 처리하기 - async: false (0) | 2020.03.03 |