0

いくつかの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)
4

1 に答える 1

3

問題のオブジェクトが削除されているため、ajax リクエストは失敗します。

まだ存在するオブジェクト (例: http://www.openstreetmap.org/api/0.6/way/666/full ) で試してみると、jQuery コードは完全に機能するはずです。または、削除されたオブジェクトの完全な履歴 ( http://www.openstreetmap.org/api/0.6/way/252570871/history ) を取得したとしても、それはおそらくあなたが望んでいるものではないでしょう。

クライアントがエラー コードを検出できるように、API は失敗した (HTTP 410 Gone) 要求の CORS ヘッダーも送信する必要があると言えます。これはgithubで報告すべきバグのようです。

于 2014-02-21T08:47:12.080 に答える