2014-05-08 6 views
5

Ich erhalte den folgenden Fehler beim Versuch, eine Verbindung zu einem Beispiel-Rest-Service zur Verfügung gestellt die Arcgis Javascript API docs.So verwenden Sie dojo/store/JsonRest zum Arbeiten ArcGIS Rest Service

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

Nach dem dojo docs ich mein Setup Dojo/Speicher haben wie folgt.

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

jsonStore.get(5); 

Ich habe auch versucht docs in einigen Headern pro Dojo vorbei, die den gleichen Fehler wie der Code oben zurückgegeben.

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

jsonStore.get(5); 

Wenn ich die Arcgis Javascript verwenden, um Abfragen Ich bin die Lage, diese Anforderung mit dem folgenden Code in diesen demo verursacht Dies keine Cross-Domain-Fragen zur Verfügung gestellt werden.

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); 
    } 

Ich würde wirklich die dojo.store verwenden möchten, wenn möglich, so dass ich meine App die MVC technique von Dojo

Antwort

4

dojo/store/JsonRest erwartet versehen mit Struktur kann der Server zu einem bestimmten Protokoll einzuhalten, aber ArcGIS Dienste haben ihre own specification. Siehe den Abschnitt REST-Server implementieren der JsonRest docs. Unabhängig von allen CORS-Problemen ist es meiner Meinung nach nicht möglich, dojo/store/JsonRest auf einen ArcGIS Online-Dienst zu verweisen, ohne es in einen RESTful-Service zu verpacken, der dem Protokoll entspricht, das der JsonRest-Store erwartet.

Abhängig von der Anzahl der Datensätze in Ihrem Service und wie oft Sie auf den Server zurückschreiben müssen, versuchen Sie möglicherweise, alle benötigten Datensätze in einen dojo/store/Memory Store mit der QueryTask zu laden, wenn die Seite geladen wird. Ich habe an einem Projekt gearbeitet, bei dem wir diese Technik erfolgreich angewendet haben.

+0

Ok, ich dachte irgendwie, dass das das Problem war. Ich begann stattdessen die Dojo/Store/Memory Road hinunter zu gehen. – marty