2010-01-13 3 views
10

왜 다음 코드 Based on Mozilla example이 작동하지 않습니까? Firefox 3.5.7 & 크롬을 사용해 보았습니다.원격 호스트에서 HTTP 응답을 얻기 위해 XMLHttpRequest

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
</head> 
<body> 
</body> 
    <script> 
    var req = new XMLHttpRequest(); 
    req.open('GET', 'http://www.mozilla.org/', false); 
    req.send(); 
    if(req.status == 200) { 
     alert(req.responseText); 
    } 
    </script> 
</html> 

브라우저가 로컬 디스크에서 HTML을 당기고 있다는하십시오 (파일 : /// C : /Users/Maxim%20Veksler/Desktop/XMLHTTP.html) 파이어 폭스에

는 다음과 같은 오류를 제공합니다 :

uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIXMLHttpRequest.send]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: file:///C:/Users/Maxim%20Veksler/Desktop/XMLHTTP.html :: <TOP_LEVEL> :: line 10" data: no] 

내가 뭘 잘못하고 있니? 원격 호스트에 요청을 제출하고 결과를 경고하고 싶습니다 (나중에 div에 추가됨).

답변

11

브라우저가 cross-site scripting이 아닙니다. 상대 경로를 사용해야합니다. 그렇지 않으면 대부분의 브라우저가 오류 또는 빈 responseText를 반환합니다.

다음 스택 오버플로 포스트

은 아마도 당신의 문제와 관련되어

+0

확인을, 어떻게 코드가 작동하는 자바 스크립트 구글 분석 통합을합니까? –

+1

@Maxim :이 게시물을 확인해보십시오. ** Google Analytics는 데이터를 어떻게 수집합니까? ** : http://stackoverflow.com/questions/892049/how-does-google-analytics-collect-its -데이터 –

0

보안 문제가 없습니까?

아마 firefox이 로컬 파일이 원격 호스트와 통신하는 것을 방해하고 있습니까?

그물을 스카우트 - 이것을 발견했습니다. 스크립트 시작 부분에 추가해보세요.

try { 
    netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); 
} catch (e) { 
    alert("Permission UniversalBrowserRead denied."); 
} 

작동 여부를 보장 할 수 없습니다. 궁극적으로 브라우저가 연결되도록 코드가 지정된 보안 허점에 들어 있기 때문입니다 (도메인 간 요청).

일반적으로 사용자의 재량에 따라 전원을 켤 수있는 몇 가지 특별한 시나리오가 있습니다.

3

file:///...을 참조하여 브라우저에 HTML 테스트 페이지를 직접 열어 본 것으로 가정합니다. XMLHttpRequest 호출의 경우 서버에서 HTML을 제공해야합니다. xampp (http://www.apachefriends.org/en/xampp.html)과 같은 도구를 사용하여 로컬 서버를 실행 한 다음 http://localhost/XMLHTTP.html에서 테스트를 실행하십시오.

참고이 당신의 동일 출처 문제가 해결되지 않는, 그러나 이것은 다음과 같은 코드가 작동 할 수 있도록합니다 :

<script> 
    var req = new XMLHttpRequest(); 
    req.open('GET', '/myTestResponse.html', false); 
    req.send(); 
    if(req.status == 200) { 
     alert(req.responseText); 
    } 
    </script>