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}}
    -
제목 작성자 날짜
공대여자
공대여자
mins01
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자