82 votos

HTML/Javascript: cómo acceder a los datos en JSON cargado en una etiqueta script con src conjunto

Tengo este archivo JSON puedo generar en el servidor en el que quiero hacer accesible en el cliente, como la página es visible. Básicamente lo que quiero lograr es:

Tengo lo siguiente:

<script id="test" type="application/json" src="http:/myresources/stuf.json">

etiqueta declarado en mi documento html. El archivo se refiere en su fuente de datos json. Como he visto, los datos han sido descargados, al igual que sucede con las secuencias de comandos.

Ahora, ¿cómo puedo acceder a él en javascript? He intentado acceder a la etiqueta de script, con y sin jquery, utilizando una multitud de métodos para tratar de obtener mis datos en json, pero de alguna manera esto no funciona. Conseguir su innerHTML habría trabajado tenido los datos json sido escrito en línea en el script. Que no era y no es lo que estoy tratando de lograr.

Remoto Petición JSON después de la carga de la página es también una opción, en caso de que usted desee sugerir que.

105voto

Ben Lesh Puntos 39290

Usted no puede cargar JSON como eso, lo siento.

Sé que estás pensando "¿por qué yo no puedo usar src aquí? He visto cosas como esta...":

<script id="myJson" type="application/json">
 { 
   name: 'Foo' 
 }
</script>

<script type="text/javascript">
    $(function() {
        var x = JSON.parse($('#myJson').html());
        alert(x.name); //Foo
     });
</script>

... bueno, para decirlo simplemente, que era sólo la etiqueta de secuencia de comandos de ser "abusado" como titular de los datos. Usted puede hacer eso con todo tipo de datos. Por ejemplo, una gran cantidad de plantillas de motores de apalancamiento etiquetas de secuencia de comandos para mantener las plantillas.

Usted tiene una lista corta de opciones para cargar el JSON de un archivo remoto:

  1. Uso $.get('your.json') o algún tipo de método AJAX.
  2. Escribir en un archivo que establece una variable global a su json. (parece cursi).
  3. Tire de ella en un iframe invisible, a continuación, raspar el contenido de que después de haber cargado (yo llamo a esto "1997 modo")
  4. Consultar a un sacerdote vudú.

Punto Final:

Remoto Petición JSON después de la carga de la página es también una opción, en caso de que usted desee sugerir que.

... que no tiene sentido. La diferencia entre una petición AJAX y una solicitud enviada por el navegador, mientras que el procesamiento de su <script src=""> es esencialmente nada. Ellos te pueden hacer un GET en el recurso. HTTP no importa si se hace porque de una etiqueta de secuencia de comandos o una llamada AJAX, y tampoco vuestro servidor.

2voto

Vitaliy Kaplich Puntos 16

Si necesita cargar JSON desde otro dominio: http://en.wikipedia.org/wiki/JSONP

Si es el mismo dominio, por lo que sólo el uso de Ajax.

-5voto

Seth C. Puntos 87

Esta por encima de respuesta incorrecta. ABSOLUTAMENTE PUEDE cargar en un JSON variable de datos usando el script etiqueta de origen. Lo hacemos con google maps con archivo externo, de la cruz de dominio, el uso de la etiqueta de origen:

<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>
<script src="https://api.raprec.com/salesforce/soap/?build=territories.json.inc" type="text/javascript"></script>
<script src="/wp-content/themes/raprec-green/js/markerclusterer.js" type="text/javascript"></script>

A continuación, se utiliza en javascript, el SRC cargas de los archivos de la var llamada "datos":

<script>for (var i = 0; i < data.locations.length; ++i) {addMarker();}</script>

Tenga en cuenta que si el uso de la variable en una función, se tienen que hacer referencia al objeto window primeros en el mundial de var, esto es sólo un función logDataVar(){ console.registro(de la ventana.de datos); } logDataVar();

Aprender más sobre esto aquí: http://snook.ca/archives/javascript/global_variable

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X