0

我想将数据发布到另一个域并接收操作返回的确认消息。所以为了让 CORS 工作,我有一个选项操作来处理我的 rails 控制器中的 OPTION HTTP 方法(在与 POST 相同的路径上),目前看起来像这样:

def options
  headers['Access-Control-Allow-Origin'] = "*"
  headers['Access-Control-Allow-Methods'] = 'GET, POST, PUT, OPTIONS'
  headers['Access-Control-Max-Age'] = '100'
  headers['Access-Control-Allow-Headers'] = '*, x-requested-with, content-type, accept, origin, referer, user-agent'
  render :text => '', :content_type => 'text/plain'
end

我的 jquery ajax 请求如下所示:(coffeescript)

$.ajax
  type: 'POST'
  url:  'http://my-other-domain.com/'
  data: data
  contentType: "application/json; charset=UTF-8"
  crossDomain: true
  success: (response) => 
    if response.data_saved
      ...
  error: () => ...

但是......它不起作用。

OPTIONS 请求似乎正在工作,返回Access-Control-Allow-Origin:*和所有,服务器接收并处理发布的数据,但 Chrome 仍然抛出

XMLHttpRequest cannot load http://my-other-domain.com/. Origin http://my-main-domain.com is not allowed by Access-Control-Allow-Origin.

在控制台中并触发错误回调。

我错过了什么?

4

2 回答 2

2

Access-Control-Allow-Origin: *头必须包含在所有响应中,而不仅仅是预检 OPTIONS 响应中。在 POST 响应中添加该标头应该可以解决问题。

(另请注意, '*' 不是 中的有效值Access-Control-Allow-Headers,但它不应该破坏任何东西)

于 2012-09-27T15:42:32.770 回答
0

我记得我遇到过这样的问题,交叉 ajax 问题,在 php 中我用 header("..."); 解决了这个问题。然后我开始 .getJSON 在 Jquery 中使用方法

于 2012-09-27T13:03:45.367 回答