2013. 10. 23.

JQuery ajax 에러 error 코드가 code 0.

form에서 submit할때 호출되는 함수에서 ajax로 뭔가를 처리 하는데 에러가 뜬다.
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

댓글 1개 :