2012-01-21 1 views
1

이 문제를 해결하는 방법을 모르겠습니다.'ip'는 Access-Control-Allow-Origin에서 허용하지 않습니다.

XMLHttpRequest는 http://gumball.wickedlysmart.com/?lastreporttime=1302212903099을로드 할 수 없습니다. Origin http://192.168.0.102은 Access-Control-Allow-Origin에서 허용되지 않습니다.

Google 검색 결과 사람들이 'Access-Control-Allow-Origin : *;'을 추가해야한다고 말합니다. 헤더에

어떻게해야합니까? 어디서 그걸 넣을 수 있니? html 파일에? 또는 js 파일?

여기 내 JS 코드입니다. 도와주세요. 그들이-

window.onload = function() { 

    var url = "http://gumball.wickedlysmart.com/?lastreporttime=1302212903099&callback=?"; 
    var request = new XMLHttpRequest(); 

    request.open("GET", url); 
    request.onload = function() { 
     if (request.status == 200) { 
      updateSales(request.responseText); 
     } 
    }; 
    request.send(null); 

    function updateSales(responseText) { 
     var salesDiv = document.getElementById("sales"); 
     salesDiv.innerHTML = responseText; 
    } 

} 

답변

2

당신은 Access-Control-Allow-Origin 헤더를 추가하지 않습니다.

"Response Header"이므로 유지자 gumball.wickedlysmart.com은 응답에 추가해야합니다.

비록 나는 그들이 LAN 전용 IP를 추가 할 것을 확신 할 지 모르지만 - 192.168.x.x.


그러나 서비스는 JSONP를 지원하므로 헤더가 필요하지 않습니다. 이는 JSONP가 Ajax가 아니며 XMLHttpRequest을 사용하지 않기 때문입니다.

대신, JSONP 요청이 문서에 새 <script> 소스를 추가하여 만들어집니다 :

function requestJSONP(url) { 
    var script = document.createElement('script'); 
    script.type = 'text/javascript'; 
    script.src = url; 

    document.body.appendChild(script); 
} 

또한 callback=??가 일부 라이브러리가 제공하는 단지 도움이됩니다 있습니다 (예를 들어, jQuery). 당신은 실제로 응답을받을 수 callback의 값으로 실제 전역 함수 이름을 지정해야합니다 :

window.processResponse = function (data) { 
    // ... 
}; 

requestJSONP('http://gumball.wickedlysmart.com/?callback=processResponse'); 

예 : http://jsfiddle.net/mnjxB/1/

+0

철저한 대답! – cheeken

관련 문제