请您提供以下建议:
我有一个使用Rails作为后端的emberjs编写的Web应用程序。现在我要用phonegap将这个应用程序移植到iOS,而我正在努力的是如何设置我的API端点,它将在iPhone中运行?
据我所知,EmberJs通过浏览器在网络上使用时,使用您当前的位置发出API请求,但是当将该应用程序用作iOS应用程序时,此方法无效。
我真的在寻找一些优雅的解决方案来简单地替换主机名吗?
感谢您的帮助!
更新:
此版本适用于更改API网址
DS.RESTAdapter.reopen({
url: 'http://somedomain.com'
});
但现在,存在访问控制问题:
Origin http://somedomain.com is not allowed by Access-Control-Allow-Origin.
答案 0 :(得分:4)
由于您尚未发布有关适配器配置方式的任何代码,因此这是为适配器设置自定义网址的正确方法:
DS.RESTAdapter.reopen({
url: 'https://somedomain.com/api'
});
然后,如果你有一个模型,例如App.User
,App.User
列表的请求现在分别转到https://somedomain.com/api/user/
,特定用户ID分别转到https://somedomain.com/api/user/123
。
<强>更新强>
从浏览器进行测试时,您必须使用标记--disable-web-security
启动浏览器(假设为chrome)以使交叉原点工作。但在现场直播中,您必须使用以下命令配置服务器以设置响应HTTP HEADERS
:
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, ...
因此在rails的情况下,您可以执行类似这样的操作来配置控制器服务器端以接受跨源请求并相应地设置标头:
...
after_filter :cors_set_access_control_headers
def cors_set_access_control_headers
headers['Access-Control-Allow-Origin'] = '*'
headers['Access-Control-Allow-Methods'] = 'POST, GET, PUT' # etc. etc.
headers['Access-Control-Max-Age'] = "1728000"
end
...
有关如何为rails配置CORS的更多示例,您可以搜索“CORS for JSON and Rails”。
希望有所帮助