2011-06-16 86 views
2

哦你好,各位SO成员,GET请求使用GWT检索XML数据?

我有使用是这样一个简单的GET请求返回XML数据的Web服务:

http://my-service:8082/qc/getData?paramX=0169&paramY=2

服务页面返回原始XML根据参数的值。

我想从使用RequestBuilder,Request等的GWT中的GET请求中检索这个数据。 但是,响应给了我空的文本,一个ZERO状态码(这不代表什么,也不是应该发生)等等。

下面是不起作用的简化代码。

public class SimpleXML implements EntryPoint { 

public void onModuleLoad() { 

    this.doGet("http://my-service:8082/qc/getData", "0169", "2"); 
} 

public void doGet(String serviceURL, String paramX, String paramY) { 
    final String getUrl = serviceURL + "?paramX=" + paramX + "&idTarification=" + paramY; 

    RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, getUrl); 

    try { 
     Request response = builder.sendRequest(null, new RequestCallback() { 

      @Override 
      public void onResponseReceived(Request request, Response response) { 
       response.getStatusCode(); // Gives me 0 (zero) :(
      } 

      @Override 
      public void onError(Request request, Throwable exception) { 
       // ... doesn't matter for this example 
      } 
     }); 
    } catch (RequestException e) { 
     // ... doesn't matter for this example 
    } 
} 

} 

我不明白为什么这是行不通的,因为这是非常简单的,我见过的教程,他们都告诉我的处事这样..

在此先感谢

回答

4

原因是,浏览器不允许使用AJAX进行跨站点请求(请参阅Same Origin Policy)。

这意味着,您只能在与您的HTML页面相同的服务器,相同的端口(使用相同的协议)上调用服务。如果您想执行跨站点请求,可以使用JSONP,如http://code.google.com/webtoolkit/doc/latest/tutorial/Xsite.html中所述。

+0

那么,如果收到的数据是XML格式,我还可以使用JSON P来制作这个跨站点请求吗? 是否有其他解决方法(使用AJAX以外的其他方法?) – dominicbri7 2011-06-16 18:33:18

+0

另外,我看不到这是一个AJAX调用,是不是一个简单的HttpRequest(GET)? – dominicbri7 2011-06-16 18:50:20

+0

@dominic:从纯粹的HTTP角度来看,这只是另一个GET请求。但从浏览器的角度来看,这是一个AJAX(XHR)请求。 /您可以使用JSONP传输XML - 只需将XML放入JSON字符串中(确保使用正确的转义!)。 – 2011-06-16 19:25:30