5

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

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

按照dojo 文档,我设置了我的 dojo/store,如下所示。

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.store,这样我就可以使用Dojo 提供的MVC 技术来构建我的应用程序

4

1 回答 1

4

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

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

于 2014-05-09T04:43:38.230 回答