我正在尝试设置一个简单的网页,该网页将使用一些openstreetmap 数据绘制地图。我现在在本地机器的端口 8000 上使用(python)simpleHTTPserver 为该页面提供服务。
在我的页面中,我运行了一个向 openstreetmap.org 发送 AJAX 请求的脚本:
$(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. 指的是我包含的 Leaflet javascript 库。)我遇到了同源策略错误的问题。Chrome 说,“XMLHttpRequest 无法加载http://www.openstreetmap.org/api/0.6/way/252570871/full。请求的资源上没有 'Access-Control-Allow-Origin' 标头。来源 'null' 是因此不允许访问。”
在本地提供 HTTP 服务时,我遵循了一个有希望的 SO 答案的建议我可以使用 python 的 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)