いくつかのopenstreetmapデータを使用してマップを描画する単純なWebページをセットアップしようとしています. 現在、ローカル マシンのポート 8000 で (python) simpleHTTPserver を使用してページを提供しています。
私のページで、AJAX リクエストを openstreetmap.org に送信するスクリプトを実行します。
$(document).ready(function() {
console.log ("Document is loaded.");
var map = L.mapbox.map('mapsection', 'examples.map-vyofok3q');
$.ajax({
url: "http://www.openstreetmap.org/api/0.6/way/252570871/full",
dataType: "xml",
success: function (xml) {
var layer = new L.OSM.DataLayer(xml).addTo(map);
map.fitBounds(layer.getBounds());
}
}); // end ajax
});
(L. は、私が含めたリーフレット JavaScript ライブラリを指します。) 同一オリジン ポリシー エラーで問題が発生しています。Chrome は、「XMLHttpRequest はhttp://www.openstreetmap.org/api/0.6/way/252570871/fullをロードできません。要求されたリソースに 'Access-Control-Allow-Origin' ヘッダーが存在しません。Origin 'null' はしたがって、アクセスは許可されていません。」
HTTP をローカルで提供する際に、有望な SO の回答Can I set a header with python's SimpleHTTPServer?からのアドバイスに従いました。そのため$ python ajax-allower.py
、 ajax-allower.py に以下のコードが含まれている場所を実行しました。それでもエラーが発生する理由を説明し、それを回避する方法を提案できますか?
#!/usr/bin/env python
# runs the simple HTTP server while setting Access-Control-Allow-Origin
# so that AJAX requests can be made.
import SimpleHTTPServer
class MyHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
def end_headers(self):
self.send_my_headers()
SimpleHTTPServer.SimpleHTTPRequestHandler.end_headers(self)
def send_my_headers(self):
self.send_header("Access-Control-Allow-Origin", "http://www.openstreetmap.org")
#self.send_header("Access-Control-Allow-Origin", "*")
if __name__ == '__main__':
SimpleHTTPServer.test(HandlerClass=MyHTTPRequestHandler)