2011-12-01 28 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