2010-08-15 32 views
2

我有一個文件,sample.xml位於一個Web服務器。我想從運行在另一臺服務器上的GWT應用程序訪問此文件。我不想讓RPC調用服務於GWT應用程序的服務器,並訪問服務器端的所需文件(如代理)。我想直接從客戶端訪問文件,因爲我的應用程序將作爲靜態文件託管在Web服務器中。從GWT客戶端訪問另一臺服務器中的文件

有沒有辦法做到這一點?

+1

你有在該服務器的一些控制?如果你這樣做,JSONP會工作。否則...我沒有看到任何優雅的方式 - SOP是有原因的;) – 2010-08-15 22:06:50

回答

1

當然 - 您必須從瀏覽器發出XHR(XmlHTTPRequest),然後解析數據。
在GWT中,您可以使用RequestBuilder類來完成(請參閱here)。

請注意,某些客戶端有所限制(例如單來源策略等)

您發出請求(GET或POST - 讓你的情況),並通過一個回調實例。
實例的onResponseReceived方法接收到一個Response對象,該對象通過調用其getText方法返回接收到的內容。

+0

'RequestBuilder'幫助。但我的要求是從另一臺服務器訪問文件,而不是從應用程序代碼提供的文件。我得到com.google.gwt.http.client.RequestPermissionException,說明相同的orgin策略限制。 – 2010-08-15 20:39:36

+0

如果您有權訪問文件服務器,可以通過發送「Access-Control-Allow-Origin」HTTP頭來緩解SOP限制 - 但應謹慎使用它,因爲它確實會帶來一些風險。 – adamk 2010-08-16 08:23:34

0

您正試圖讓您的網站(a.com/index.html)參考b.com/sample.xml。我看到幾個選項。

如果你有機會獲得b.com的服務器:

  • 編輯sample.xmlsample.js包含在JSON與回調相同的信息,並與script標籤
  • 引用它使用編譯你的網站跨站點加載程序(請參閱Controlling Compiler Output),將您的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

相關問題