답변:
다른 경우 :
AJAX 호출0
을 보냈고 AJAX 응답을 받기 전에 브라우저 새로 고침이 트리거 된 경우 의 상태 코드를 얻을 수 있습니다 . AJAX 통화가 취소되고이 상태가 표시됩니다.
<form onsubmit="return false;">
e.preventDefault();
내 경험상 다음과 같은 경우 상태가 0으로 표시됩니다.
를 사용할 때 동일한 문제가 발생합니다 <button onclick="">submit</button>
. 그런 다음 사용하여 해결<input type="button" onclick="">
상태 코드 0은 요청한 URL에 도달 할 수 없음을 의미합니다. 변경하여 // 뭔가 / 일 : HTTP 에 https : //로 뭔가 / 일이 나를 위해 일했다. IE는 상태 코드가 0 일 때 "권한이 거부되었습니다"라는 오류를 발생시킵니다. 다른 브라우저에서는 그렇지 않습니다.
Google 아약스 상태 0에 표시되기 때문에 시간을 낭비하는 데 도움이되는 몇 가지 팁을 남기고 싶었습니다 ... Ajax를 사용하여 Codeigniter의 Phil의 REST_Controller 인 PHP 서비스를 호출했습니다 (이것이 확실하지 않은지 확실하지 않습니다) 그것과 관련이 있거나없는) 상태 0, readystate 0을 계속 얻었고 나를 미치게 만들었습니다. 나는 그것을 디버깅하고 있었고 메시지를 종료하는 대신 에코하고 반환 할 때 성공했다는 것을 알았습니다. 마침내 디버깅을 끄고 시도해 보았습니다. PHP가있는 xDebug 디버거가 어떻게 든 응답을 수정 한 것 같습니다. PHP 디버거를 사용하는 경우 PHP 디버거를 꺼서 도움이되는지 확인하십시오.
jquery가 상태 코드 0을 제공하는 또 다른 경우를 발견했습니다. 어떤 이유로 XMLHttpRequest가 정의되지 않은 경우이 오류가 발생합니다.
분명히 이것은 일반적으로 웹에서 발생하지 않지만 야간 파이어 폭스 빌드의 버그로 인해 내가 작성한 추가 기능 에서이 문제가 발생했습니다. :)
jQuery.ajax()
XHR 객체에 문제가 있다고 지적했습니다 . 요청은 AJAX 호출에서도 생성되지 않았지만 여전히 f.open을 얻는 것은 함수 및 상태 코드 0이 아닙니다. 원인 : $.ajaxSettings.xhr
에서 객체를 $.ajaxSetup({xhr})
반환하고 new window.XMLHttpRequest();
대신 반환 하여 문제를 해결했습니다
나는 같은 문제가 있었고 브라우저의 XSS (크로스 사이트 스크립팅) 블록과 관련이있었습니다. 서버를 사용하여 작동하게했습니다.
http://www.daniweb.com/web-development/javascript-dhtml-ajax/threads/282972/why-am-i-getting-xmlhttprequest.status0을 살펴보십시오 .
jquery ajax 호출의 상태 코드 0과 비슷한 문제가 발생하여 진단하는 데 하루 종일 걸렸습니다. 아직 아무도이 이유를 언급하지 않았으므로 공유하겠다고 생각했습니다.
우리의 경우 문제는 HTTP 서버 충돌이었습니다. PHP의 일부 버그가 Apache를 불고 있었으므로 클라이언트 쪽에서는 다음과 같습니다.
mirek@toccata:~$ telnet our.server.com 80
Trying 180.153.xxx.xxx...
Connected to our.server.com.
Escape character is '^]'.
GET /test.php HTTP/1.0
Host: our.server.com
Connection closed by foreign host.
mirek@toccata:~$
여기서 test.php에는 충돌 코드가 포함되어 있습니다. 서버에서 리턴 된 데이터가 없습니다 (헤더조차도 아님) => ajax 호출이 상태 0으로 중단되었습니다.
필자의 경우 django 서버를 아래에서 실행 http://127.0.0.1:8000/
하지만 ajax 호출을 (으)로 전송하여 발생했습니다 http://localhost:8000/
. 동일한 주소로 매핑 될 것으로 예상하더라도 요청을 localhost로 보내지 않도록해야합니다.
나에게 문제는 호스팅 회사 (Godaddy)가 상당한 응답 데이터 (수십 킬로바이트 이상)가있는 POST 작업을 일종의 보안 위협으로 취급하여 발생했습니다. 이 중 6 개 이상이 1 분 동안 발생한 경우 호스트는 다음 1 분 동안 POST 요청에 응답 한 PHP 코드 실행을 거부했습니다. 나는 호스트가 대신 무엇을했는지 확실하지 않지만 tcpdump를 사용하면 TCP 재설정 패킷이 브라우저의 POST 요청에 대한 응답으로 오는 것을 보았습니다. 이로 인해 jqXHR 객체에 반환 된 http 상태 코드가 0이되었습니다.
POST에서 GET으로 작업을 변경하면 문제가 해결되었습니다. Godaddy가이 제한을 적용한 이유는 확실하지 않지만 호스트 변경보다 코드 변경이 더 쉽습니다.
제 경우에는 Safari Mobile에서만이 기능을 사용하고있었습니다. 문제는 상대 URL (whatever.php) 대신 전체 URL ( http://example.com/whatever.php )을 사용하고 있다는 것 입니다. 내 사이트가 http://example.com에 호스팅되어 있기 때문에 XSS 문제가 될 수는 없습니다 . Safari는 http 부분을보고 나머지 URL을 검사하지 않고 안전하지 않은 요청으로 자동 플래그 지정합니다.
"동일한 오리진 정책이 http ajax에서 원격 리소스를 읽을 수 없습니다. 이유 : cors header 'access-control-allow-origin'missing"이 표시되면 요청하는 동안 브라우저 콘솔을 관찰하십시오. 응답 헤더에 "Access-Control-Allow-Origin"을 추가하십시오. 예 : 자바에서는 response.setHeader ( "Access-Control-Allow-Origin", "*")와 같이 설정할 수 있습니다. 여기서 응답은 HttpServletResponse입니다.