使用具有不同URL的Ember-data RESTAdapter

时间:2013-06-17 09:18:10

标签: jquery ember.js ember-data

我正在使用具有不同URL的ember数据,因为我正在从ember-rails转移到外部ember应用程序,因此API网址为http://localhost:5000,而ember应用程序为http://localhost:9000

现在问题是我需要包含x-appidx-app-secret,但每当为其中任何一个添加xhr.setRequestHeader()时,GET请求都会变为OPTIONS请求。

当我在同一个域使用ember-rails时,此代码工作正常,这是问题还是还有其他缺失?

ajax: function(url, type, hash) {
    if (this.headers !== undefined) {
      var headers = this.headers;
      if (hash) {
        hash.beforeSend = function (xhr) {
          // Works fine
          xhr.setRequestHeader('Accept', 'application/vnd.vendor+json;version=1');

          // Changes Request from GET to OPTIONS
          xhr.setRequestHeader('x-vendor-appid', '12412412');
          xhr.setRequestHeader('x-vendor-secret', 'aslkdfjaskldfjasd');
        };
      }
    }
    return this._super(url, type, hash);
}

1 个答案:

答案 0 :(得分:1)

浏览器正在发送OPTIONS请求,因为请求的域名与您网页的域名不匹配。这会触发Cross-Origin Resource Sharing (CORS)限制。

您需要响应来自服务器的CORS请求,告诉客户端允许通过设置几个HTTP头字段向域发出CORS请求。然后,浏览器将发出原始请求。我用ember.js / rails实现了这个。