2009-11-30 2 views
6

Sto sviluppando una semplice presentazione di JavaScript (jQuery). Volevo usare JSON per memorizzare alcuni parametri statici sul contenuto di ogni diapositiva.Una soluzione ordinata per l'utilizzo dei dati JSON statici

Dato che mi piace mantenere separati i miei dati dal mio codice, è comunque necessario che JavaScript valuti un file .json?

  • AJAX sembra un po 'eccessivo: basta valutarlo in fase di esecuzione, niente è dinamico.
  • Potrei avere un file .js separato che contiene i miei dati JSON come oggetto - ma questo sembra disordinato.

Quindi, prima di utilizzare una delle soluzioni di cui sopra, volevo solo assicurarmi che non esistesse un modo più semplice per consentire a JavaScript di valutare un file di testo.

risposta

8

Cosa c'è di sbagliato nell'avere un file js separato per il proprio oggetto? Deve vivere da qualche parte. Sono d'accordo che ajax è eccessivo, ma non riesco a capire perché pensi che un oggetto JavaScript in un file .js sia "disordinato".

+0

Concordato. Averlo in un file JS è simile ad averlo memorizzato da qualsiasi altra parte - pensa ai file di configurazione o XML, ecc. - Niente di male. –

+0

In effetti ti rende la vita meno disordinata! –

+0

Quindi non lo vuoi nel tuo codice, recuperato dal codice o collegato? Questo piuttosto lascia in un input nascosto, che è ancora più pacchiano. Sono con questi ragazzi: un esterno.js è l'opzione più pulita. –

4

Valutare JSON è molto semplice:

var jsonString = "{'name': 'Joe', 'age': 36}"; 

var data = eval('(' + jsonString + ')'); 
data.name // 'Joe' 
data.age // 36 

Il modo più semplice per memorizzare questi dati è quello di metterlo in una <input type="hidden"> e poi leggerlo usando document.getElementById('hiddenElementId').value.


Il quadro completo:

HTML

<input type="hidden" id="hiddenElementId" value="{'name': 'Joe', 'age': 36}" /> 

JS

function getData() { 
    var jsonString = document.getElementById('hiddenElementId').value; 
    var data = var data = eval('(' + jsonString + ')'); 
    return data; 
} 

In realtà non è necessario essere un elemento hidden - si può mettere in un attributo in una delle immagini.


Un'altra opzione è quella di attaccare in un tag <script> sotto qualche nome.

<script type="text/javascript"> 
    var data = {'name': 'Joe', 'age': 36}; 
</script> 

questo modo data diviene una variabile globale (cosa che non mi piace tanto) e può essere utilizzato da tutte le parti. È una soluzione semplice, ma un po 'caotica - vorrei andare con il primo.

+0

Per valutare una stringa JSON è possibile usare 'JSON.parse (string)' sebbene non conosca IE. – fphilipe

+0

Fr tutti i browser è possibile utilizzare JSON.parse se si utilizza la libreria JSON. La maggior parte delle persone disapprova la valutazione. I browser più recenti hanno un analisi "sicura". – Nosredna

1

J-query ha una funzione di analisi JSON che funziona anche in IE ..

$.parseJSON("{'json':'rules for data'}"); 

Godetevi ..

ma solo una questione come farlo in ordine come:

FUNCTION_HOWTO({json:'test',p2:'part2'}) = { 
    json:'test', 
    p2:'part two' 
}