2014-05-08 48 views
5

如果嘗試連接到樣本休息服務時出現以下錯誤,請提供Arcgis Javascript API docs如何使用dojo/store/JsonRest工作ArcGIS Rest服務

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

dojo docs我已經設置了我的dojo/store,如下所示。

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

jsonStore.get(5); 

我還試圖使在某些報頭每道場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來查詢我能夠做出與本demo提供了以下代碼這個請求,這不會導致任何跨域的問題。

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,這樣我就可以構建使用道場

回答

4

dojo/store/JsonRest提供的MVC technique預計服務器要堅持特定的協議我的應用程序,但ArcGIS服務有他們的own specification。請參閱JsonRest docs的實現REST服務器部分。因此,無論CORS有什麼問題,我都認爲無法將dojo/store/JsonRest指向ArcGIS Online服務,而無法將其包裝在遵守JsonRest存儲所期望的協議的某些RESTful服務中。

根據服務中記錄的數量以及需要多長時間回寫一次服務器,您可以嘗試在頁面加載時使用QueryTask將所需的所有記錄提取到dojo/store/Memory商店。我已經在一個項目中成功地使用了這種技術。

+0

好的,我有點想這是問題所在。相反,我開始走下道場/商店/記憶之路。 – marty