5

Arcgis Javascript API ドキュメントで提供されているサンプル REST サービスに接続しようとすると、次のエラーが表示されます。

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://bcgphp' is therefore not allowed access.

道場のドキュメントに従って、次のように道場/ストアをセットアップしました。

var jsonStore = new JsonRest({
      target: "//sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer/"
    });

jsonStore.get(5);

また、dojo docsごとにいくつかのヘッダーを渡そうとしましたが、上記のコードと同じエラーが返されました。

var jsonStore = new JsonRest({
      target: "//sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer/",
      headers: {'X-Requested-With': 'XMLHttpRequest'}
    });

jsonStore.get(5);

Arcgis Javascript を使用してクエリを実行すると、このデモで提供されている次のコードを使用してこのリクエストを行うことができます。これにより、クロス ドメインの問題は発生しません。

var queryTask = new QueryTask("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer/5");

    var query = new Query();
    query.returnGeometry = false;
    query.outFields = [
      "SQMI", "STATE_NAME", "STATE_FIPS", "SUB_REGION", "STATE_ABBR",
      "POP2000", "POP2007", "POP00_SQMI", "POP07_SQMI", "HOUSEHOLDS",
      "MALES", "FEMALES", "WHITE", "BLACK", "AMERI_ES", "ASIAN", "OTHER",
      "HISPANIC", "AGE_UNDER5", "AGE_5_17", "AGE_18_21", "AGE_22_29",
      "AGE_30_39", "AGE_40_49", "AGE_50_64", "AGE_65_UP"
    ];


    queryTask.execute(query, showResults);

    function showResults (results) {
      console.log(results);
    }

Dojo が提供するMVC 手法を使用してアプリを構築できるように、可能であれば dojo.store を使用したいと考えています。

4

1 に答える 1

4

dojo/store/JsonRestは、サーバーが特定のプロトコルに準拠していることを期待していますが、ArcGIS サービスには独自の仕様があります。JsonRest docsの REST サーバーの実装セクションを参照してください。dojo/store/JsonRestしたがって、CORS の問題に関係なく、JsonRest ストアが期待するプロトコルに準拠する RESTful サービスにラップされていない ArcGIS Online サービスを指すことはできないと思います。

サービス内のレコードの数と、サーバーに書き戻す必要がある頻度に応じて、ページの読み込み時にdojo/store/Memoryを使用して、必要なすべてのレコードをストアにプルしてみてください。QueryTask私は、その手法をうまく利用したプロジェクトに取り組みました。

于 2014-05-09T04:43:38.230 に答える