티스토리 뷰


<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이 일어나게 된다. 
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함