2009-11-30 11 views
6

Estoy desarrollando una presentación de diapositivas simple de JavaScript (jQuery). Quería usar JSON para almacenar algunos parámetros estáticos sobre el contenido de cada diapositiva.Una solución ordenada para el uso de datos estáticos de JSON

Como me gusta mantener mis datos separados de mi código, ¿hay alguna forma de que JavaScript evalúe un archivo .json?

  • AJAX parece un poco exagerado, solo necesita evaluarlo en tiempo de ejecución, nada es dinámico.
  • Podría tener un archivo .js separado que contenga mis datos JSON como un objeto, pero esto parece desordenado.

Así que antes de utilizar una de las soluciones anteriores, solo quería asegurarme de que no hubiera una manera más limpia de tener JavaScript evaluando un archivo de texto.

Respuesta

8

¿Qué tiene de malo tener un archivo js separado para su objeto? Tiene que vivir en algún lado. Estoy de acuerdo en que ajax es exagerado, pero no entiendo por qué crees que un objeto JavaScript en un archivo .js es "desordenado".

+0

Convenido. Tenerlo en un archivo JS es similar a tenerlo almacenado en otro lugar, piense en archivos de configuración o XML, etc. - No tiene nada de malo. –

+0

¡De hecho, hace que su vida sea menos complicada! –

+0

¿Entonces no lo quiere en su código, recuperado por código o vinculado? Eso bastante bien lo deja en una entrada oculta, que es aún más pegajosa. Estoy con estos muchachos: un externo.js es la opción más limpia. –

4

Evaluación de JSON es muy fácil:

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

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

La forma más fácil de almacenar estos datos es ponerlo en un <input type="hidden"> y luego leerlo usando document.getElementById('hiddenElementId').value.


El cuadro 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; 
} 

En realidad no es necesario ser un elemento hidden - se puede poner en un atributo en una de las imágenes.


Otra opción es que se pegue en una etiqueta <script> bajo un nombre.

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

De esta manera data se convierte en una variable global (algo que no me gusta mucho) y se puede utilizar de todas partes. Es una solución simple, pero un poco desordenada, me gustaría ir con la primera.

+0

Para evaluar una cadena JSON puede usar 'JSON.parse (cadena)' aunque no sé sobre IE. – fphilipe

+0

En todos los navegadores, puede usar JSON.parse si usa la biblioteca JSON. La mayoría de las personas frunce el ceño ante la evaluación. Los navegadores más nuevos tienen un análisis "seguro". – Nosredna

1

J-Query tiene una función de análisis de JSON que incluso funciona en IE ..

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

Disfrute ..

pero sólo una cuestión de cómo lo hacen ordenada como:

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