2011-03-17 6 views
0

gwt 응용 프로그램에서 grails 작업으로 어떻게 상호 도메인 요청을 할 수 있을지 궁금합니다. 나는 grails에 wgt-plugin이 있다는 것을 알고 있지만,이 플러그인을 사용한 개발은 너무 느리다. 왜냐하면 gwt 코드의 각 변경 후에 컴파일해야하기 때문이다. 그래서 gwt 부분을 별도로 개발하고 Ajax 요청을 통해 grais 응용 프로그램에서 데이터를 가져옵니다. 그러나 gwt 응용 프로그램은 다른 서버에서 실행 중입니다 (gwt : 포트 8888, garils : 포트 8080). 내가 Grails의 조치를 요청하려고하면 나는 브라우저에서이 오류를 얻을 : 나는에서 작업을 호출하는 경우gwt grails 크로스 도메인 요청

response.setHeader('Access-Control-Allow-Origin', "http://127.0.0.1:8888"); 

그리고 :

XMLHttpRequest cannot load http://localhost:8080/MyApp/MyDomain/myAction. 
Origin http://127.0.0.1:8888 is not allowed by Access-Control-Allow-Origin. 

내가 Grails의 활동에 응답 헤더를 수정하려고 브라우저에서 찾을 수 있습니다 :

Access-Control-Allow-Origin:http://127.0.0.1:8888 

그러나 문제를 해결하지는 못합니다. 내가 뭘 잘못 했니? 사전에

감사합니다,

Medrod

UPDATE :

솔루션은 JSONP입니다.

private void jsonp() { 

JsonpRequestBuilder jsonp = new JsonpRequestBuilder(); 
String URL = "http://localhost:8080/MyApp/myDomain/myAction"; 

jsonp.requestObject(URL, new AsyncCallback<JavaScriptObject>() { 
    @Override 
    public void onFailure(Throwable caught) { 

    } 
    @Override 
    public void onSuccess(JavaScriptObject result) { 

    } 
}); 

} 

을 그리고이 같은 Grails의 코드를 보면 : 는 GWT-사이트에 내 코드는 다음과 같습니다 마이크에

def myAction = { 
    def results = MyDomain.findAll() 
    render "${params.callback}(${results as JSON})" 
} 

감사합니다.

답변

1

웹 브라우저에는 사용자가 수행하지 못하도록 Same Origin Policy (SOP)이라는 보안 메커니즘이 내장되어 있습니다.

파일을로드하여 페이지에 SCRIPT 태그로 삽입 할 때 호출되는 JavaScript 함수에 응답을 포함하는 JSONP을 사용할 수 있습니다.

myCallbackFunction(str, json, ...){...} 
0

단순히로 JSON 문자열에 변수를 할당이 문제를 해결하려면 : 당신은 기능이

myCallbackFunction('a string parameter', {or:{a:json:'data'}}, ...) 

그리고 당신의 페이지 :

예를 들어 응답 뭔가처럼 될 수있다 eval

private final native MyJson evalJson(String json) /*-{ 
    eval('var res = ' + json); 
    return res; 
}-*/; 

자세한 내용은 "XMLHttpRequest cannot load. Origin is not allowed by Access-Control-Allow-Origin"을 참조하십시오.