2

请您提供以下建议:

我有一个用 emberjs 编写的 web 应用程序,后端是 Rails。现在我要把这个带有phonegap的应用程序移植到iOS,而我正在努力的事情是如何设置我的API端点,它将在iPhone中工作?

据我了解,当通过浏览器在 Web 上使用 EmberJs 时,它会使用您当前的位置来发出 API 请求,但是当将该应用程序用作 iOS 应用程序时,这种方法不起作用。

我真的在寻找一些优雅的解决方案来简单地替换主机名或其他东西?

感谢帮助!

更新:

这个适用于更改 API URL

DS.RESTAdapter.reopen({
  url: 'http://somedomain.com'
});

但是现在,有访问控制问题:

Origin http://somedomain.com is not allowed by Access-Control-Allow-Origin. 
4

1 回答 1

4

由于您尚未发布任何有关如何配置适配器的代码,因此这是为您的适配器设置自定义 url 的正确方法:

DS.RESTAdapter.reopen({
  url: 'https://somedomain.com/api'
});

然后,如果您有一个模型,例如App.User,对列表的请求App.User现在将分别转到https://somedomain.com/api/user/特定用户 ID 和特定用户 ID https://somedomain.com/api/user/123

更新

从浏览器进行测试时,您必须使用标志启动浏览器(假设为 chrome)--disable-web-security以使跨源工作。但在现实生活中,您必须配置您的服务器以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”,例如。

希望能帮助到你

于 2013-05-31T23:01:58.563 回答