alert으로 에러 코드를 찍어보니 code 값으로 0을 뱉어 낸다.
아래는 submit 버튼을 누르면 form의 submit_check()함수가 호출되고,
form이 submit되는 간단한 구조의 form이다.
<form name="Frm" method="post" onsubmit="return submit_check(this);"> <input type="submit" value="submit">
function submit_check(){ jQuery.ajax({ type:"GET", url: target_url, success:function(msg){ //성공! }, error: function(xhr,status,error){ //에러! alert("code:"+xhr.status); } }); f.action = submit_url; return true; }
에러 0의 의미가 더 있을진 모르지만 2가지를 알아 봤다.
In my experience, you'll see a status of 0 when either doing cross-site scripting (where access is denied) or requesting a URL that is unreachable (typo, DNS issues, etc).
1. 대충 뭐, 접근 거부 된거나 DNS 문제 등으로 접속 안되는 주소로 연결 했을때.
It's could be possible to get a status code of 0 if you have sent an ajax call and a refresh of the browser was trigger before getting the ajax response. The ajax call will be cancelled and you will getting this status.
2. ajax 호출하고 반환값을 받아와야 되는데, 이 반환값이 도착 하기전에 submit 또는 새로고침 등으로 페이지 이동이 발생해 버리는 경우.
내 문제는 2번이다. 저 위의 form에서 onsubmit 부분은 지워 버리자. ajax가 끝 날때 submit 되야 하는데, 저건 곤란하다. 어찌 됐건 함수가 끝나면 submit 되버리니까.
<input type="button" onclick="submit_check()" value="submit">
버튼 type은 button으로, 이벤트도 달아서 변경해 준다. 그리고 아래는 바뀐 함수.
function submit_check(){ jQuery.ajax({ type:"GET", url: target_url, success:function(msg){ //성공! document.logFrm.action = submit_url; document.logFrm.submit(); }, error: function(xhr,status,error){ //에러! alert("code:"+xhr.status); } }); }
이렇게 되면, 버튼을 눌렀을때 함수가 실행되며 ajax 발사!
submit_check() 함수는 실행을 마쳐도 form은 submit 되지 않는다.
ajax가 무사히 반환값을 가지고 돌아오면 그때 form을 submit 시킨다.
꿀같은 출처는 역시 스택오버플로우.
http://stackoverflow.com/questions/2000609/jquery-ajax-status-code-0
덕분에 살았습니다. 감사합니다....
답글삭제