首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >缺少使用ember-data的options请求

缺少使用ember-data的options请求
EN

Stack Overflow用户
提问于 2013-08-17 20:02:44
回答 2查看 3.6K关注 0票数 1

我正在尝试处理ember和ember数据,但在正确处理CORS时遇到了问题。

我已经设法使用静态fixture定义了一个模型等,但现在我想使用一些远程JSON。所以我像这样设置ember-data:

代码语言:javascript
复制
App = Ember.Application.create();

App.Store = DS.Store.extend({
    revision: 13,
    adapter: DS.RESTAdapter.create({
        url: 'http://clara.eagle/v1/money'
    })
});

像这样的模型:

代码语言:javascript
复制
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') 
});

一条这样的路线:

代码语言:javascript
复制
App.IndexRoute = Ember.Route.extend({
    model: function() {
        return App.Transaction.find();
    }
});

作为后端,我有一个现有的应用程序接口,它将返回一个有效的GET请求的JSON,下面的CORS头,一个OPTIONS请求。

代码语言:javascript
复制
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有问题(screenshot)。使用一个单独的jQuery (即普通的jQuery),OPTIONS请求可以按预期运行。

我是Ember os的新手,可能有些东西我没有注意到,但目前我还看不到!

EN

回答 2

Stack Overflow用户

发布于 2013-08-18 00:16:52

您可以尝试以下两个更改:

代码语言:javascript
复制
App.Store = DS.Store.extend({
  revision: 13,
  adapter: DS.RESTAdapter.create({
    url: 'http://clara.eagle/v1/money',
    corsWithCredentials: true
  })
});

另外,将此选项添加到您的服务器配置Access-Control-Allow-Credentials: true中,这与ajax设置的corsWithCredentials选项相结合:

代码语言:javascript
复制
Access-Control-Allow-Origin: http://ember.eagle
Access-Control-Allow-Headers: X-Requested-With, X-AUTHENTICATION, X-IP
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS

希望能有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2013-08-19 01:29:29

在客户端:

代码语言:javascript
复制
Ember.$.ajaxSetup({
    beforeSend: function(xhr) {
        xhr.setRequestHeader('X-IP', 'some value');
    }
});

代码语言:javascript
复制
Ember.$.ajaxSetup({
    headers: { 'X-IP': 'some value' }
});

在服务器端,响应options方法:

代码语言:javascript
复制
Access-Control-Allow-Origin: http://ember.eagle
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: X-Requested-With, X-Prototype-Version, X-IP
Access-Control-Max-Age: 1728000
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18288574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档