如何使用dojo/store/JsonRest来处理ArcGIS Rest Service

mar*_*rty 5 javascript dojo arcgis cross-domain arcgis-js-api

尝试连接到示例休息服务时,我收到以下错误,前提是Arcgis Javascript API文档.

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://bcgphp' is therefore not allowed access.
Run Code Online (Sandbox Code Playgroud)

dojo文档之后,我按照以下方式设置了我的dojo/store.

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

jsonStore.get(5);
Run Code Online (Sandbox Code Playgroud)

我也尝试过每个dojo 文档传入一些标题,它返回与上面代码相​​同的错误.

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

jsonStore.get(5);
Run Code Online (Sandbox Code Playgroud)

当我使用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);
    }
Run Code Online (Sandbox Code Playgroud)

如果可能,我真的想使用dojo.store,以便我可以使用Dojo提供的MVC技术构建我的应用程序

Tom*_*son 4

dojo/store/JsonRest期望服务器遵守特定的协议,但 ArcGIS 服务有自己的规范请参阅JsonRest 文档的实现 REST 服务器部分。因此,无论存在任何 CORS 问题,我认为都不可能指出dojo/store/JsonRestArcGIS Online 服务,而不将其包装在遵循 JsonRest 存储所期望的协议的某个 RESTful 服务中。

根据服务中的记录数量以及需要写回服务器的频率,您可以尝试dojo/store/Memory使用QueryTask页面加载时将所需的所有记录拉入存储中。我曾参与过一个项目,我们成功地使用了该技术。