0

Rails アプリに Google Places API を実装しようとしています。

これは、ajax リクエストからデータをフェッチする関数を使用しようとしたときに発生するエラーです。

XMLHttpRequest cannot load . Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access.

私はrack-cors gemを使用しており、このスニペットをconfig/application.rbファイルに追加しました:

config.middleware.insert_before 0, "Rack::Cors" do
      allow do
        origins '*'
        resource '*', :headers => :any, :methods => [:get, :post, :options]
      end
    end

これは私の見解(coffeescript)からのajaxリクエストです:

    $.ajax
      url: url
      dataType: "json"
      type: "GET"

この部分を application_controller に追加しました

before_filter :cors_preflight_check
after_filter :cors_set_access_control_headers

def cors_set_access_control_headers
headers['Access-Control-Allow-Origin'] = '*'
headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS'
headers['Access-Control-Allow-Headers'] = '*'
headers['Access-Control-Max-Age'] = "1728000"
end

def cors_preflight_check
if request.method == :options
  headers['Access-Control-Allow-Origin'] = '*'
  headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS'
  headers['Access-Control-Allow-Headers'] = '*'
  headers['Access-Control-Max-Age'] = '1728000'
  render :text => '', :content_type => 'text/plain'
end
end

そして、これを私のルートファイルに

 match '*path' => 'application#cors_preflight_check', :via => :options

「cors_preflight_check」メソッドがリクエストによってトリガーされないことに気付きました。(ビュー内の特定のリンクをクリックすると、AJAX 要求が行われます)

リクエストヘッダーが変更されていないことに気付きました。

(Access-Control-Allow-Origin はリクエストヘッダーに追加されません)

jsonp は、Places API でサポートされていないため、オプションではありません

これらのスレッドに書かれているすべてを試しました:

4

1 に答える 1