使用SproutCore的跨域请求服务

时间:2011-12-01 01:18:36

标签: ajax xmlhttprequest cross-domain sproutcore

我一直试图解决这个问题,但没有取得任何成功。

我的网域上有一个webapp,比如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

1 个答案:

答案 0 :(得分:0)

这不是Sproutcore问题;这是一个javascript同源政策问题。

如果您无法修改生产服务器,则别无选择,只能开发自己的代理服务器,并让您的代理服务器获得真实服务。

这有效地取代了生产环境中的sc-server。

所有这个服务器都会接收传入请求并将其传递给www.anotherDomain.com/?service.do

您需要确保传递了所有参数,Cookie,标题,http动词等等。

这远非理想,因为现在错误可能发生在更多地方。真实的服务失败了吗?代理失败了吗?等

如果您可以修改其他域,则可以

1)在那里部署你的SC应用程序 2)放入CORS标题,以便您可以进行跨域请求