我一直试图解决这个问题,但没有成功。
我的域中有一个webapp,说www.myDomain.com
。我需要调用另一个域上存在的服务,例如www.anotherDomain.com/service.do?
我正在使用SproutCore的SC.Request.getUrl(www.anotherDomain.com/service.do?)
调用该服务。
我收到一条错误消息,指出access-control-allow-origin不允许使用Origin www.myDomain.com
。
在开发阶段并使用sc-server
时,使用代理解决了该问题。现在,我已经将应用程序部署到了实际的服务器上,我用实际的域名替换了设置代理服务器的所有行。我已经开始再次收到该错误。
问题是我无法对其他域上的服务器进行任何更改。我遇到的所有帖子都指出,另一个域上的其他服务器应该提供access-control-allow-origin
header ,并且应该支持OPTIONS
动词。
我的问题是,我可以使用SproutCore的SC.Request.getUrl()
方法连接到该服务吗?
另外,我阅读过的其他文章提到,不应对简单的GET
请求进行预检。为什么我的请求以OPTION
而不是GET
的形式发送?
在此先感谢一吨! :D
最佳答案
这不是Sproutcore的问题。这是一个JavaScript同源政策问题。
如果您无法修改生产服务器,则别无选择,只能开发自己的代理服务器,并让代理访问真正的服务。
这有效地替代了生产环境中的sc服务器。
该服务器要做的就是接收传入的请求,并将其传递给www.anotherDomain.com/?service.do
。
您需要确保传递了所有参数,Cookie,标题,http动词等。
这远非理想,因为现在错误可能会在更多地方发生。真实服务失败了吗?代理失败了吗? ETC。
如果您可以修改其他域,则可以
1)在此处部署您的SC应用程序。
2)放入CORS header ,以便您可以进行跨域请求
关于ajax - 使用SproutCore的跨域服务请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8335420/