我正在尝试掌握 ember 和 ember 数据,但在正确处理 CORS 时遇到问题。
我已经设法使用静态夹具定义模型等,但现在想使用一些远程 JSON。所以我像这样设置 ember-data:
App = Ember.Application.create();
App.Store = DS.Store.extend({
revision: 13,
adapter: DS.RESTAdapter.create({
url: 'http://clara.eagle/v1/money'
})
});
像这样的模型:
App.Transaction = DS.Model.extend({
type: DS.attr('string'),
occurrence: DS.attr('date'),
details: DS.attr('string'),
amount: DS.attr('number'),
currency: DS.attr('string')
});
和这样的路线:
App.IndexRoute = Ember.Route.extend({
model: function() {
return App.Transaction.find();
}
});
作为后端,我有一个现有的 API,它将为有效GET
请求返回 JSON,以下 CORS 标头是一个OPTIONS
请求。
Access-Control-Allow-Origin: http://ember.eagle
Access-Control-Allow-Headers: X-Requested-With, X-AUTHENTICATION, X-IP
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
(ember.eagle 是 ember 应用程序域,clara.eagle 是 api 域)。
当我运行应用程序时,chrome 告诉我:
XMLHttpRequest cannot load http://clara.eagle/v1/money/transactions. Origin http://ember.eagle is not allowed by Access-Control-Allow-Origin.
所以我查看了网络选项卡以查看OPTIONS
请求给出的结果,但我找不到。虽然这解释了 API 请求失败的原因,但我不知道为什么OPTIONS
请求没有被执行,因为它最终使用 jQuery 发出请求(据我所知)。
因此,我的问题是为什么OPTIONS
没有生成这个请求?如果不是这样设计的,那么我该怎么做呢?
我已经测试过OPTIONS
请求是由 API 生成的,并且GET
请求也有效,所以我不认为 API 有问题(截图)。单独使用 jQuery(即 vanilla jQuery),OPTIONS
请求按预期运行。
我是 Ember os 的新手,我可能缺少一些东西,但目前我看不到它!