我有一個文件,sample.xml
位於一個Web服務器。我想從運行在另一臺服務器上的GWT應用程序訪問此文件。我不想讓RPC調用服務於GWT應用程序的服務器,並訪問服務器端的所需文件(如代理)。我想直接從客戶端訪問文件,因爲我的應用程序將作爲靜態文件託管在Web服務器中。從GWT客戶端訪問另一臺服務器中的文件
有沒有辦法做到這一點?
我有一個文件,sample.xml
位於一個Web服務器。我想從運行在另一臺服務器上的GWT應用程序訪問此文件。我不想讓RPC調用服務於GWT應用程序的服務器,並訪問服務器端的所需文件(如代理)。我想直接從客戶端訪問文件,因爲我的應用程序將作爲靜態文件託管在Web服務器中。從GWT客戶端訪問另一臺服務器中的文件
有沒有辦法做到這一點?
當然 - 您必須從瀏覽器發出XHR(XmlHTTPRequest),然後解析數據。
在GWT中,您可以使用RequestBuilder
類來完成(請參閱here)。
請注意,某些客戶端有所限制(例如單來源策略等)
您發出請求(GET或POST - 讓你的情況),並通過一個回調實例。
實例的onResponseReceived
方法接收到一個Response
對象,該對象通過調用其getText
方法返回接收到的內容。
'RequestBuilder'幫助。但我的要求是從另一臺服務器訪問文件,而不是從應用程序代碼提供的文件。我得到com.google.gwt.http.client.RequestPermissionException,說明相同的orgin策略限制。 – 2010-08-15 20:39:36
如果您有權訪問文件服務器,可以通過發送「Access-Control-Allow-Origin」HTTP頭來緩解SOP限制 - 但應謹慎使用它,因爲它確實會帶來一些風險。 – adamk 2010-08-16 08:23:34
您正試圖讓您的網站(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
你有在該服務器的一些控制?如果你這樣做,JSONP會工作。否則...我沒有看到任何優雅的方式 - SOP是有原因的;) – 2010-08-15 22:06:50