Ajax 从GWT客户端访问另一台服务器中的文件

Ajax 从GWT客户端访问另一台服务器中的文件,ajax,gwt,same-origin-policy,Ajax,Gwt,Same Origin Policy,我有一个文件,sample.xml位于一个web服务器上。我想从另一台服务器上运行的GWT应用程序访问此文件。我不想对服务于GWT应用程序的同一台服务器进行RPC调用,也不想访问服务器端所需的文件(比如代理)。我希望直接从客户端访问该文件,因为我的应用程序将作为静态文件托管在web服务器中 有办法吗?当然-您必须从浏览器发出XHR(XmlHTTPRequest),然后解析数据。 在GWT中,可以使用RequestBuilder类(请参阅) 请注意,某些客户端限制可能适用(例如单一来源政策等) 您

我有一个文件,
sample.xml
位于一个web服务器上。我想从另一台服务器上运行的GWT应用程序访问此文件。我不想对服务于GWT应用程序的同一台服务器进行RPC调用,也不想访问服务器端所需的文件(比如代理)。我希望直接从客户端访问该文件,因为我的应用程序将作为静态文件托管在web服务器中


有办法吗?

当然-您必须从浏览器发出XHR(XmlHTTPRequest),然后解析数据。
在GWT中,可以使用
RequestBuilder
类(请参阅)

请注意,某些客户端限制可能适用(例如单一来源政策等)

您发出请求(在您的情况下为GET或POST-GET)并传递回调实例。

实例的
onResponseReceived
方法接收一个
Response
对象,该对象通过调用其
getText
方法返回接收到的内容。

您试图让您的网站(
a.com/index.html
)引用
b.com/sample.xml
。我看到了一些选择

如果您可以访问
b.com
的服务器:

  • sample.xml
    编辑到
    sample.js
    中,在JSON中通过回调包含相同的信息,并使用
    script
    标记引用它
  • 使用跨站点加载器编译您的网站(请参阅),将您的
    index.html
    放在
    b.com/index.html
    ,将所有其他文件放在
    a.com
    上。然后,所有RPC调用都可以转到
    b.com
    ,但这意味着用户必须导航到
    b.com
    ,而不是
    a.com
如果您无法访问
b.com
的服务器: -只需提供一个链接供人们下载
sample.xml

-在具有某种脚本支持(PHP、Python、Ruby、Java等)的服务器上托管
a.com
,并将代理放置到
b.com/sample.xml

“RequestBuilder”提供了帮助。但我的要求是从另一台服务器访问文件,而不是从提供应用程序代码的服务器。我收到com.google.gwt.http.client.RequestPermissionException,声明相同的组织策略限制。如果您有权访问文件服务器,您可以通过发送
Access Control Allow Origin
HTTP头来缓解SOP限制,但应小心使用,因为它会带来一些风险。您对该服务器有控制权吗?如果您这样做了,JSONP将起作用。否则。。。我看不出任何优雅的方式——SOP的存在是有原因的;)