2011-12-01 51 views
0

我一直在努力服務跨域請求您解決這項問題,沒有任何成功。使用SproutCore的

我有一個web應用程序駐留在我的領域,說www.myDomain.com。我需要調用另一個域上的服務,例如www.anotherDomain.com/service.do?

我正在使用SproutCore的SC.Request.getUrl(www.anotherDomain.com/service.do?)來調用該服務。

我得到一個錯誤,說,來源www.myDomain.com不允許訪問控制允許來源。

當我處於開發階段並使用sc-server時,使用代理解決了問題。現在我已經將該應用程序部署到了實際的服務器上,我將所有設置了代理的行都替換爲了實際的域名。我已經開始再次得到這個錯誤。

問題是我無法對其他域上的服務器進行任何更改。我所遇到的狀態下所有職位,在其他域中的其它服務器應該提供access-control-allow-origin頭,它應該支持OPTIONS動詞。

我的問題是,我可以使用SproutCore的SC.Request.getUrl()方法連接到該服務嗎?

此外,我已閱讀的其他帖子提到,一個簡單的GET請求不應該被預檢。那麼爲什麼我的請求會以OPTION而不是GET

由於一噸提前! :d

回答

0

這不是一個問題SproutCore的;這是一個JavaScript相同來源政策問題。

如果您不能修改生產服務器,你別無選擇,只能開發自己的代理服務器,並讓您的代理打實實在在的服務。

這有效地取代SC-服務器在生產環境中。

該服務器所要做的就是接收傳入的請求並將其傳遞給www.anotherDomain.com/?service.do

你需要確保你傳遞的所有參數,餅乾,頭部的HTTP動詞,等等....

這是很不理想的,因爲現在的錯誤可以在更多的地方出現。真正的服務失敗了嗎?代理失敗了嗎?等

如果你可以修改其他領域,你可以

1)有部署SC應用程序。
2)放入CORS標題,這樣你就可以提出跨域請求

+0

嗯。我會試一試,看看它是如何發展的。有關獲取代理設置的任何建議?我從來沒有這樣做過。 – codeBearer

+0

這取決於您選擇的服務器技術。只需搜索開發一個代理服務器應該有大量的例子.. – hvgotcodes

+0

那麼,這個問題是由我們通過創建一個實際調用服務和獲取XML的JSP頁面來解決的。 SproutCore應用程序現在調用JSP頁面(它位於同一個域中),並且JSP將調用發送給外部服務。:) 感謝您的幫助,因爲代理是唯一的方法。 :) – codeBearer