form 서브밋 할 때 onclick으로 서브밋 하지 말자!

form 서브밋 할 때 onclick으로 서브밋 하지 말자!

<script>
function form_submit(form){
...생략...
form.submit();
}
</script>
<form>
... 생략 ...
<input type="submit" onclick="form_submit(this.form)" />
</form>

위처럼 할 경우
submit이 두번일어날 수 있다.
이럴경우 브라우저마다 2번 URL을 호출하는 경우가 생길 수 있는데, 문제가 가장 되는것은 IE6이다.
(submit 말고 일반 페이지 이동과 form의 submit일 같이 발생되도 비슷하다)

IE6의 경우 저렇게 호출할 경우 서버쪽에서는 SYN_RECV 상태가 생긴다.(안 생길 수도 있다.)
(동시에 두번 호출 시 처음 호출된게 IE에서는 abort 가 되는데, 이때 따로 서버에 TCP 응답을 안줘서 서버에서는 SYN_RECV 상태로 계속 유지된다.)

SYN_RECV 상태가 계속 유지되면 타임아웃으로 밖에 안 없어진다.
타임아웃도 시간도 길어서....
즉, SYN_RECV가 계속 쌓이면 서버가 서비스 못할 경도가 되버릴 수도 있다.

IE외의 브라우저에서도 문제가 되는데
submit 할 때 중간에 action을 바꾼다면, 원하는 페이지로 정확하게 이동 못 할 수 있다.


추천하는 처리방법

<script>
function form_submit(form){
...생략...
return true;
}
</script>
<form onsubmit="return form_submit(this.form)">
... 생략 ...
<input type="submit" />
</form>

이렇게하면 submit 이벤트에 따라 동작하고, 다른 submit은 하지 않게 된다.
즉, 1번만 submit이 일어나게 된다.
댓글
  • No Nickname
    No Comment
  • 권한이 없습니다.
    {{m_row.m_nick}}
    -
목록형 📷 갤러리형
제목
[기본형] HTML (with 부트스트랩5.3 , jquery 3.7, vue.js)
유용한 리눅스(LINUX) 명령어
[공지] 기술 게시판
4.28
4.29
4.30
5.1
5.2
5.3
5.4
5.5
5.6
5.7
5.8
5.9
5.11
5.12
5.13
5.15
5.16
5.17
5.18
5.19
5.20
5.21
5.22
5.23
5.24
5.25
5.26
5.27
5.28
5.29
5.30
5.31
6.1