独学でRuby on Rails5のアプリ制作をしています。
Google Maps Elevation APIを使って、緯度・経度からその地点の標高を取得したいと思っています。
例えば、以下のURLをリクエストすると、レスポンスがJSON形式で返ってきます。
https://maps.googleapis.com/maps/api/elevation/json?locations=39.7391536,-104.9847034&key=[自分のAPIキー]
これを、Google Chromeでアクセスすると問題なくレスポンスが返るのですが、Railsから呼ぼうとすると、
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access.
というエラーが出ます。
調べたところ、これはCORSという仕組みによるためらしいのですが、これを解決する方法がわかりません。
以下のようにAjaxで呼び出しています。
js
1$.ajax({ 2 url: 'https://maps.googleapis.com/maps/api/elevation/json?locations=39.7391536,-104.9847034&key=[自分のAPIキー]', 3 type: 'GET', 4 success: function(data){ 5 console.log(data.results.resolution); 6 } 7 });
リクエストのヘッダーにAccess-Control-Allow-Origin: *
を加えれば解決するらしいのですが、Railsでそれをどのように行えばいいのかがわかりません。
また他の解決法として、AjaxのオプションにdataType: 'jsonp'
を指定すると、レスポンスは返ってくるのですが、それを扱おうとするとUncaught SyntaxError: Unexpected token :
のエラーが発生します。(JSONとJSONPは扱い方が違う?)
どのような方法でも良いので、このAPIのレスポンスを問題なく使用するための解決策をご教授願います。よろしくお願いします。
3/4 追記
Google Maps APIのエレベーションサービスを使えば、Google Maps APIを用いて標高を求めることができました!
しかし、CORSの本質的な問題の解決法がまだわからないので、引き続き回答を募集させてください。
あなたの回答
tips
プレビュー