2014-05-08 33 views
5

Viene visualizzato il messaggio di errore seguente quando si tenta di connettersi a un servizio di assistenza campioni fornito il Arcgis Javascript API docs.Come utilizzare dojo/store/JsonRest per funzionare ArcGIS Rest Service

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

Dopo la dojo docs ho installato il mio dojo/negozio come segue.

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

jsonStore.get(5); 

ho anche provato passando alcuni header per il dojo docs, che ha restituito lo stesso errore come il codice precedente.

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

jsonStore.get(5); 

Quando uso l'Arcgis Javascript per eseguire query sono in grado di fare questa richiesta con il seguente codice fornito in questo demo Ciò non causa problemi di dominio croce.

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

mi piacerebbe davvero utilizzare il dojo.store, se possibile, in modo che possa strutturare la mia app utilizzando il MVC technique fornito da Dojo

risposta

4

dojo/store/JsonRest aspetta il server di aderire ad un protocollo specifico, ma i servizi ArcGIS hanno il loro own specification. Vedere la sezione Implementazione di un server REST di JsonRest docs. Quindi, indipendentemente da eventuali problemi CORS, non penso sia possibile puntare a dojo/store/JsonRest su un servizio ArcGIS Online senza doverlo avvolgere in un servizio RESTful che aderisce al protocollo previsto dal negozio JsonRest.

A seconda del numero di record nel servizio e della frequenza con cui è necessario scrivere di nuovo sul server, è possibile provare a prelevare tutti i record necessari in un negozio dojo/store/Memory utilizzando QueryTask al caricamento della pagina. Ho lavorato a un progetto in cui abbiamo usato con successo questa tecnica.

+0

Ok, stavo pensando che fosse questo il problema. Ho iniziato invece a scendere il dojo/store/Memory road. – marty