XMLHttpRequest 상태 0(응답 텍스트가 비어 있음)
XMLHttpRequest를 사용하여 데이터를 가져올 수 없습니다(상태 0 및 responseText가 비어 있음):
xmlhttp=new XMLHttpRequest();xmlhttp.open("GET", http://www.w3schools.com/XML/cd_catalog.xml", true); xmlhttp.onreadystatechange=function(){if(xmlhttp.readyState==4)alert-status " + xmlhttp.status); }xmlhttp.send();
"status 0"을 클릭합니다.
localhost 요구와 같은 상황입니다(cd_catalog.xml은 로컬파일로 저장됩니다).
xmlhttp.open("GET", http://localhost/cd_catalog.xml", true);
단, localhost IP 요구에서는
xmlhttp.open("GET", http://127.0.0.1/cd_catalog.xml", true);
로컬 파일 요청으로
xmlhttp.open("GET", cd_catalog.xml", true);
이상 없음(상태 200)
온라인 요청과 관련된 문제(상태=0)의 원인은 무엇입니까?
PS: Live HTTP Headers는 4가지 경우 모두 정상임을 나타냅니다.
HTTP/1.1 200 OK콘텐츠 길이: 4742
PS2: VMWare 상의 Apache 로컬 웹 서버(호스트 OS Win7, 게스트 OS Ubuntu, 네트워크 어댑터 - NAT).브라우저 – Firefox.
스크립트가 포함된 html 파일이 파일 방식을 통해 브라우저에서 열리면 상태는 0이 됩니다.파일(apache 또는 Tomcat 등)을 서버에 저장한 후 브라우저에서 http 프로토콜을 통해 파일을 엽니다.(http://localhost/myfile.html 등) 이것이 해결책입니다.
문제의 원인은 크로스 도메인콜을 실행하려고 하면 실패하기 때문입니다.
로컬 호스트 개발을 하고 있는 경우는, 도메인간에 콜을 발신할 수 있습니다.저는 항상 하고 있습니다.
파이어폭스의 경우는, 설정내에서 유효하게 할 필요가 있습니다.
signed.applets.codebase_principal_support = true
그런 다음 다음과 같은 내용을 XHR 오픈코드에 추가합니다.
if (isLocalHost()){
if (typeof(netscape) != 'undefined' && typeof(netscape.security) != 'undefined'){
netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');
}
}
IE의 경우, 내 기억이 맞다면, ActiveX XHR에서 작동하도록 하려면 "Miscellaneous → Access data sources over domains"에서 브라우저의 보안 설정을 활성화하기만 하면 됩니다.
IE8 이상에서는 Native XmlHttpRequest 객체에 크로스 도메인 기능도 추가되었지만 저는 아직 그것들을 가지고 놀지 않았습니다.
실제로 버튼 타입이 Button not Submit인 것을 확인해 주세요.이것이 최근에 만난 장소에서의 상태 경합을 일으켰습니다.
서버가 OPTIONS 메서드 및 GET 및 POST(둘 중 사용 중인 것)에 다음과 같은 헤더를 사용하여 응답하는 경우:
Access-Control-Allow-Origin: *
잘 될 수도 있어요.FireFox 3.5 및 rekonq 0.4.0에 있는 것 같습니다.OPTIONS에 대한 헤더와 초기 응답으로 서버는 브라우저에 대해 "이 교차 도메인 요청을 통과시킵니다."라고 말합니다.
요청 타임아웃도 고려하십시오.
최신 브라우저는 서버 응답에 시간이 너무 오래 걸리면 readyState=4 및 status=0을 반환합니다.
setRequestHeader("Access-Control-Allow-Origin","*")
서버 응답에 응답합니다.
나도 비슷한 문제에 직면했었다.모든 것이 정상이었고 "ready state"는 4였지만 "status"는 0이었습니다.Apache PHP 포터블 서버를 사용하고 있었고, "XMLHttpRequest" 객체를 사용한 파일이 html 파일이었기 때문입니다.파일 확장자를 php로 변경했더니 문제가 해결되었습니다.
javascript 콘솔을 엽니다.에러 메세지가 표시됩니다.내 경우엔 CORS였다.
cryptic error 0(암호 에러 0)이 표시되면, 다음의 순서로 진행됩니다.| 기타 도구 | 개발자 도구 (Ctrl+Shift)+I)의 Chrome(오류 표시 페이지)
로그의 빨간색 텍스트를 읽고 실제 오류 메시지를 확인합니다.너무 많으면 마우스 오른쪽 버튼을 클릭하여 콘솔을 클리어한 다음 마지막 요청을 다시 수행합니다.
첫 번째 문제는 Authorization 헤더를 브라우저용 자체 크로스 도메인 웹 서비스에 처음으로 전달했다는 것입니다.
나는 이미 가지고 있었다:
Access-Control-Allow-Origin: *
하지만 그렇지 않다:
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Authorization
내 웹 서비스의 응답 헤더에 있습니다.
추가 후 웹 서버 없이 index.html 파일을 로컬로 실행할 때 오류 0이 자신의 웹 서버에서 사라졌지만 여전히 코드 펜에서 오류가 발생했습니다.
되돌아가다| 기타 도구 | 코드펜 오류 발생 시 개발자 도구.코드펜은 https를 사용하기 때문에 보안이 낮기 때문에 http로 호출할 수 없습니다.
따라서 웹 서비스를 https에서 호스트해야 합니다.
진정한 오류 메시지를 얻는 방법을 알고 있습니다. 값을 매길 수 없습니다.
'왜'라는 http://127.0.0.1/cd_catalog.xml
하는 동안http://localhost/cd_catalog.xml
파이어폭스 127.0.0.1 localhost 2 입니다.
또 가 있습니다.status === 0
다음 중 하나:
「」를 ,'load'
에서 ""로XHR.upload
MDN에서 제안하는 바와 같이('모니터링 진행 상황'의 업로드 부분으로 스크롤 다운), XHR 오브젝트는status=0
을 사용하다「 」를,'load'
콘텐츠를 다운로드할 때처럼 (localhost에서 실행되고 있지 않다는 점을 고려하면) 문제 없습니다.
에서 좋은 절절 however however however however however however however however however however however however however however however however however however.'progress'
핸들러,를 「Handler」, 「Handler」에 가 있습니다.XHR.upload
XHR 오브젝트 자체에 직접 접속하지 않습니다.
지금까지 Chrome OSX에서만 테스트했기 때문에 MDN의 문서와 Chrome의 실장은 어느 정도인지 잘 모르겠습니다.
Alex Robinson은 이미 (그리고 먼저) 이 문제에 대한 정답을 제시했습니다.하지만 좀 더 자세히 설명하자면...
HTTP 응답 헤더를 추가해야 합니다.
Access-Control-Allow-Origin: *
이렇게 하면 결과는 '아마도'가 아니라 '잘 될 거야'가 됩니다.
NB HTTP 응답 헤더를 추가해야 하므로 사용자가 제어하는 서버에서만 이 작업을 수행할 수 있습니다.http://w3schools.com/XML/cd_catalog.xml을 원래 URL에서 직접 가져올 수 없습니다.XMLHttpRequest
(OP의 질문에 따르면) 그 자원은 (적어도 2015년 4월 24일 현재) 그러한 CORS 헤더를 포함하지 않기 때문이다.
자세한 것은, http://en.wikipedia.org/wiki/Cross-origin_resource_sharing 를 참조해 주세요.
이와 비슷한 문제는 저의 html 코드를 확인함으로써 해결되었습니다.는 저 an를 하고 요.onclick
이렇게요.onclick="sendFalconRequestWithHeaders()"
이 방법은 당신처럼 Ajax를 호출하여 내가 원하는 대로 합니다.하지만 예상외로 브라우저는 아무것도 반환하지 않았다.
누군가의 노력으로 인해, 나는 이 핸들러에 거짓으로 돌아와 해결했다.이 포스트에 도착하기 전에, 저는 사무실에서 주말 3일 반 동안 코드를 작성하며CORS filters
,jetty config
, other.jersey and embedded jetty
이 문제를 해결하기 위해 모든 이해도를 회전시키고 있습니다.cross domain ajax requests
표준과 같은 것.자바스크립트의 단순한 실수가 얼마나 당신을 멍청하게 만드는지 어이가 없었다.
나는 실,, 력어어어 to를 시도해 .signed.applets.codebase_principal_support = true
and and and and and 。isLocalHost() **if**
이 방법은 우리가 구현해야 할 수도 있습니다.firefox는 그런 것은 없다고 합니다.지금 git 패치를 깨끗하게 제출하려면 코드를 청소해야 합니다.그 사람 덕택에.
브라우저 요구 "127.0.0.1/somefile.html"은 로컬 웹 서버에 변경되지 않고 도착하며, IPv6가 지원되는 경우 "localhost/somefile.html"은 "0:0:0:0:0:0:0:1/somefile.html"로 도착할 수 있습니다.따라서 후자는 도메인에서 다른 도메인으로 이동하는 것으로 처리될 수 있습니다.
Alex Robinson과 bmju는 이종 기원의 문제를 이해하기 위한 귀중한 정보를 제공했습니다.원하는 GET/POST(예를 들어 CORS OAuth 서비스 엔드포인트)를 작성하기 전에 클라이언트 코드로 OPTIONS를 명시적으로 호출해야 할 수도 있다는 점을 덧붙이고 싶습니다.브라우저/라이브러리가 OPTIONS 요청을 자동으로 처리하지 못할 수 있습니다.그루버, 이게 네 질문에 대한 가능한 대답 중 하나야
같은 문제(readyState는 4, status 0)가 있었습니다만, 이 튜토리얼에서 설명하는 다른 어프로치를 실행했습니다.https://spring.io/guides/gs/consuming-rest-jquery/
XMLHttpRequest를 전혀 사용하지 않고 jquery $.ajax() 메서드를 사용했습니다.
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="hello.js"></script>
</head>
<body>
<div>
<p class="greeting-id">The ID is </p>
<p class="greeting-content">The content is </p>
</div>
</body>
public/hello.js 파일의 경우(또는 같은 HTML 코드에 직접 삽입할 수도 있습니다):
$(document).ready(function()
{
$.ajax({
url: "http://rest-service.guides.spring.io/greeting"
}).then(function(data) {
$('.greeting-id').append(data.id);
$('.greeting-content').append(data.content);
});
});
현재 IP 주소를 Atlas MongoDB 화이트리스트에 다시 추가해야 하므로 XMLHttpRequest status 0 오류를 삭제했습니다.
python의 bottle 앱:
@route('/mazer2/get', method='POST')
def GetMaze2():
if MazeCore == None: abort(666, "MazeCore поломался :///")
Check()
Comm = request.body.read().decode("utf-8")
Map = MazeCore.GetMaze2(Comm, TestToken2())
response.headers["Access-Control-Allow-Origin"] = "*" #Here ;'-} It helped me
return Map
XMLHttpRequest에 의해 플라스크 환경에서 python에 의해 작성된 웹 메서드를 소비하려고 했을 때도 같은 문제가 있었습니다.파이어폭스 콘솔을 검사한 결과 문제의 원인이 다른 오리진 웹 메서드를 호출하지 못하도록 하는 Same Origin Policy임을 알 수 있었습니다(Origin은 프로토콜, 도메인, 포트 번호를 포함한 3부분의 태플로 구성됩니다).저는 CORS를 사용하는 것이 해결책이었는데, 다행히 플라스크코라는 파이톤 패키지가 있어서 모든 것이 잘 작동합니다.
이 문제가 생긴 건 그냥...0.0.0.0
로서 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★localhost
그리고 그것은 동작한다.
편집:아래의 Malvolio의 코멘트를 읽어주세요.이 답변은 구식입니다.
크로스 도메인 XMLHttpRequests는 실행할 수 없습니다.
의 콜127.0.0.1
는 테스트 페이지가 다음 위치에 있기 때문에 동작합니다.127.0.0.1
국지적인 시험이야
다른 2개의 테스트는 JavaScript가 XMLHttpRequest를 통해 원격 서버와 통신할 수 없기 때문에 실패합니다.
대신 다음 중 하나를 고려할 수 있습니다.
- XMLHttp - 리모트 XML 컨텐츠의 취득을 자신의 서버에 의뢰합니다(php 스크립트 등).
- 완전한 JavaScript를 유지하려면 Google App Engine과 같은 서비스를 사용하려고 합니다.
도움이 되었으면 좋겠다
언급URL : https://stackoverflow.com/questions/5005960/xmlhttprequest-status-0-responsetext-is-empty
'source' 카테고리의 다른 글
ngRepeat => 편집 불가능한 입력을 사용하여 입력을 일련의 원시 요소에 바인딩 (0) | 2023.02.26 |
---|---|
AngularJS/UI-Router에서 어떤 상태가 구성되어 있는지 확인하는 방법 (0) | 2023.02.26 |
로드 시 메서드를 한 번만 호출하는 응답 (0) | 2023.02.26 |
Redux를 사용하여 JWT 토큰을 새로 고치는 방법 (0) | 2023.02.26 |
탭 탐색기를 사용하여 화면 구성 요소에 소품을 전달하는 방법 (0) | 2023.02.26 |