2011-03-15 15 views

risposta

13

Questa è una piccola domanda.

Se vuoi dire, come si fa a fare una richiesta di server e lo hanno trattato automaticamente come JSON sulla via del ritorno, si farebbe qualcosa di simile:

dojo.xhrGet({ 
    url: "your/server/endpoint/here", 
    handleAs: "json", 
    load: function(obj) { 
     /* here, obj will already be a JS object deserialized from the JSON response */ 
    }, 
    error: function(err) { 
     /* this will execute if the response couldn't be converted to a JS object, 
      or if the request was unsuccessful altogether. */ 
    } 
}); 

Nota handleAs: "json" sopra, che racconta dojo.xhrGet (o xhrPost, ecc.) per tentare di convertire la risposta a un oggetto JS prima di attivare la richiamata load.

http://dojotoolkit.org/reference-guide/dojo/xhrGet.html

autonomamente, se si dispone già di te è una stringa JSON e solo bisogno di convertirlo in un oggetto JS, Dojo ha dojo.fromJson(str) per questo (e dojo.toJson(obj) per l'altra direzione).

+0

+1 Una risposta molto approfondita. –

1

Con dojo 1.8: aggiungere l'ID modulo "dojo/richiesta/XHR" per le dipendenze e XHR come argomento callback, quindi:

xhr("path/to/file.json", { 
     handleAs: "json" 
    }).then(function(obj){ 
     // do something with the obj    
    }, function(err){ 
     // Handle the error condition 

    }, function(evt){ 
     // Handle a progress event from the request if the 
     // browser supports XHR2 

    }); 
21

Nel Dojo 1.8+, per caricare un file JSON (non come XHR), usa dojo/text per caricare il file, quindi dojo/json per analizzarlo. Così:

require([ 'dojo/json', 'dojo/text!/path/to/data.json' ], 
    function(JSON, data) 
{ 
    var data = JSON.parse(data); 
}); 

Non il "!" dopo dojo/testo, usato per specificare il file da caricare.

+0

Non hai chiuso la richiesta. Devi aggiungere ");" alla fine del tuo codice. – Laurence

+0

corretto! Grazie, Laurence. – voidstate

+0

Come posso aggiungere il mio percorso di contesto in "dojo/text! /path/to/data.json" quando do il nome del file in require? Qualcosa del genere: location.pathname.replace (/ \/[^ /] * $ /, ''). – coder247

0

si può fare uso del modulo/richiesta dojo:

<script> 
    require(["dojo/request", function(request){ 
     request("patho/to/file.json" , {handleAs :"json"}).then(function(result){/*success*/} , function(err){/*Oops!*/}) 

    }); 
</script>