0

当我从 ember-rails 移动到外部 ember 应用程序时,我正在使用具有不同 URL 的 ember 数据,因此 API urlhttp://localhost:5000和 ember 应用程序是http://localhost:9000.

现在的问题是我需要包含x-appidand x-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);
}
4

1 回答 1

1

浏览器正在发送 OPTIONS 请求,因为请求的域与您页面的域不匹配。这会触发跨域资源共享 (CORS)限制。

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

于 2013-06-17T14:53:49.443 回答