XMLHttpRequest에서 빈 응답 텍스트
정상적으로 실행되지만 빈 responseText를 반환하는 XMLHttpRequest를 작성했습니다.
Javascript는 다음과 같습니다.
var anUrl = "http://api.xxx.com/rates/csv/rates.txt";
var myRequest = new XMLHttpRequest();
callAjax(anUrl);
function callAjax(url) {
myRequest.open("GET", url, true);
myRequest.onreadystatechange = responseAjax;
myRequest.setRequestHeader("Cache-Control", "no-cache");
myRequest.send(null);
}
function responseAjax() {
if(myRequest.readyState == 4) {
if(myRequest.status == 200) {
result = myRequest.responseText;
alert(result);
alert("we made it");
} else {
alert( " An error has occurred: " + myRequest.statusText);
}
}
}
코드는 정상적으로 동작합니다.지나가면 readyState == 4 및 상태 == 200이 표시되지만 responseText는 항상 비어 있습니다.
에러 디스패치: getProperties의 로그 오류(Safari 디버깅)가 표시되지만 참조할 수 없습니다.
Safari와 Firefox에서 로컬과 리모트서버 양쪽에서 코드를 실행하고 있습니다.
브라우저에 넣으면 URL에서 문자열이 반환되고 상태 코드가 200이 됩니다.
Mac Widget에서도 같은 URL로 같은 코드를 썼는데 브라우저에서도 같은 코드가 반환되지 않습니다.
이http://api.xxx.com/당신의 영역의 일부입니까?그렇지 않으면 동일한 오리진 정책에 의해 차단됩니다.
다음의 스택 오버플로우 투고를 체크하고, 몇개의 회피책을 찾을 수 있습니다.
문제 해결 완료
저 같은 경우에는 ($.ajax, $.get 또는 $.getJ로) ajax 콜을 하는 것이 문제였습니다.jQuery)의 SON 메서드(url 파라미터에 풀패스 포함):
그러나 올바른 방법은 url 값을 다음과 같이 전달하는 것입니다.
url: "site/cgi-bin/serverApp.php"
일부 브라우저는 충돌하지 않고 텍스트 간에 구분이 되지 않지만, Mac OS용 Firefox 3.6에서는 이 전체 경로를 "사이트 간 스크립팅"으로 사용합니다. 같은 브라우저에서는 다음과 같은 차이가 있습니다.
http://mydomain.com/site/index.html
그리고...
http://www.mydomain.com/site/index.html
실제로는 올바른 포인트뷰이지만 대부분의 구현에서는 구별이 없기 때문에 AJAX 요구를 실행하는 메서드에서 스크립트에 대한 풀 경로를 지정하는 텍스트를 모두 삭제하는 것이 해결책입니다.index.html 파일에서 BASE 태그를 삭제합니다.
base href="http://mydomain.com/" <--- 삭제!
삭제하지 않으면 이 시스템용 브라우저의 이 버전은 사이트 간 요청처럼 사용자의 Ajax 요청을 받아들일 수 있습니다.
같은 문제가 발생하지만 Mac OS 머신에서만 발생합니다.문제는 Firefox가 Ajax 응답을 "cross site" 호출로 취급하며 다른 머신/브라우저에서는 정상적으로 동작한다는 것입니다.이에 대한 도움말을 찾지 못했습니다(이것은 Firefox 구현 문제인 것 같습니다). 그러나 서버 측에서 다음 코드를 증명합니다.
header('Content-type: application/json');브라우저가 데이터를 "json data"로 가져올 수 있도록 합니다.
브라우저로 인해 사이트 간 스크립팅을 수행할 수 없습니다.
URL이 도메인 외부에 있는 경우 서버 측에서 이 작업을 수행하거나 해당 URL을 도메인으로 이동해야 합니다.
이게 최선의 방법이 아닐 수도 있어요.하지만 어떻게든 효과가 있었으니까, 난 그걸 가지고 달릴 거야.
데이터를 반환하는 my php 함수에서는 리턴 행보다 한 줄 앞에 echo 문을 추가하여 송신하고 싶은 데이터를 에코합니다.
왜 효과가 있었는지 알겠지만, 성공했어요.
당신과 비슷한 문제가 있었어요.다음 document.domain 솔루션을 사용해야 했습니다.
웹 서비스 측도 변경해야 했습니다.다음 위치에 있는 "Access-Control-Allow-Origin" 헤더를 사용:
https://developer.mozilla.org/En/HTTP_access_control
언급URL : https://stackoverflow.com/questions/1941340/empty-responsetext-from-xmlhttprequest
'programing' 카테고리의 다른 글
| $.getJ가 되는 이유SON은 소리 없이 실패합니까? (0) | 2023.03.15 |
|---|---|
| 플럭스 대신 Redux를 사용하면 어떤 단점이 있을 수 있습니까? (0) | 2023.03.15 |
| "문의 양식 7" 양식에 ID 추가 (0) | 2023.03.15 |
| Angular에서 분리된 스코프가 없는 명령에서 컨트롤러 함수를 호출합니다.JS (0) | 2023.03.15 |
| 테이블을 드롭하거나 다시 작성하지 않고 Oracle의 특정 위치에 열을 삽입하려면 어떻게 해야 합니까? (0) | 2023.03.15 |