2012-07-17 17 views
5

Realmente he estado buscando durante casi 2 horas y todavía tengo que encontrar un buen ejemplo sobre cómo pasar datos JSON de PHP a JS. Tengo un script de codificación JSON en PHP que hace eco de un script JSON que se parece más o menos a esto (pseudocódigo).¿Cómo obtener JSON de PHP a JS?

{ 
"1": [ 
    {"id":"2","type":"1","description":"Foo","options:[ 
    {"opt_id":"1","opt_desc":"Bar"}, 
    {"opt_id":"2","opt_desc":"Lorem"}], 
    {"id":"3","type":"3","description":"Ipsum","options:[ 
... 
"6": 
    {"id":"14","type":"1","description":"Test","options:[ 
... 
etc 

El problema es, ¿cómo puedo obtener esta información con JavaScript? Mi objetivo es crear un script .js que genere una encuesta basada en estos datos JSON, pero sinceramente, Dios no puede encontrar ningún ejemplo sobre cómo hacerlo. Adivinando que es algo así como:

Obj jsonData = new Object(); 
jsonData = $.getJson('url',data,function()){ 
    enter code here 
} 

Cualquier enlace a cualquier buen ejemplo o similar sería muy apreciado. Y pensé que codificar los datos en PHP fue la parte difícil ...

EDIT:

Tengo este fragmento de código para trabajar, por lo que puedo revisar mis datos JSON enteros en JS. Pero ahora no puedo entender cómo llegar a los datos internos. Imprime el número de la etapa (1-6), pero no puedo entender cómo obtener los datos de la pregunta, y luego los datos de las opciones dentro de cada pregunta. ¿Debo experimentar con cada bucle anidado?

$(document).ready(function() 
    {  
     $('#show-results').click(function() 
     { 
      $.post('JSAAN.php', function(data) 
      { 
       var pushedData = jQuery.parseJSON(data); 
       $.each(pushedData, function(i, serverData) 
       { 
        alert(i); 
       }) 
      }) 
     }) 
    }); 

La idea aquí es entrar en la información de la pregunta en el nivel medio y imprima la descripción qusetion, a continuación, basado en el tipo de pregunta - bucle a través de las opciones (si lo hay) para crear/RadioButton grupos de casillas de verificación antes de pasar a la siguiente pregunta El primer número representa en qué etapa de la encuesta de múltiples etapas estoy trabajando actualmente. Mi plan es dividirlo en 6 etapas ocultando/mostrando varios div hasta la última página donde se envía el formulario a través de Ajax.

Respuesta

6

No estoy seguro pero creo, puede utilizar

$.getJSON('url', data, function(jsonData) {      
    // operate on return data (jsonData)  
}); 

ahora se puede acceder y operar sobre los datos PHP JSON, si vas a usarlo fuera del getJSON llamada puede asignarlo a una variable

var neededData; 
$.getJSON('url', data, function(jsonData) { 
    neededData = jsonData; 
});  
+0

Esta es deffo lo que necesito, sólo hay que hacer que funcione xD intentado poner una alerta en el interior getJSON pero nunca se activa. – Tom

+1

Creo que hay un error de paréntesis en la función (jsonData)) {, debería ser función (jsonData) {no? Sin embargo, ninguno de los dos puede funcionar, solo lo hará por un tiempo :) – Tom

+0

sí, tienes razón sobre el paréntesis extra :) – Leon

5

Prueba la documentación de jQuery: http://api.jquery.com/jQuery.getJSON/

Este ejemplo debe empezar:

$.getJSON('ajax/test.json', function(data) { 
    var items = []; 

    $.each(data, function(key, val) { 
    items.push('<li id="' + key + '">' + val + '</li>'); 
    }); 

    $('<ul/>', { 
    'class': 'my-new-list', 
    html: items.join('') 
    }).appendTo('body'); 
}); 

Este ejemplo se basa en la estructura JSON;

{ 
    "one": "Singular sensation", 
    "two": "Beady little eyes", 
    "three": "Little birds pitch by my doorstep" 
} 
+0

Ahh bien, muchas gracias :) Esto también funciona para $ .getJSON ('json.php')? – Tom

+0

Sí, solo sustituya la URL que necesite; los datos devueltos por php deberán estar codificados con JSON. json_encode(); – ajtrichards

3

No utilice echo en PHP. Imprimirá una cadena no JSON.

Usa json_encode para pasar JSON a javascript.

El uso puede usar each para obtener los valores en JSON al final de javascript.

Ejemplo

http://www.darian-brown.com/pass-a-php-array-to-javascript-as-json-using-ajax-and-json_encode/

+0

¡Ah, salud! Estaba imprimiendo principalmente solo para ver que tengo la sintaxis correcta, pero siempre es bueno saberlo. – Tom

+1

He dado un enlace de ejemplo. Revisalo. –

+0

¿Debo seguir repitiendo el json_encode como en este ejemplo? http://www.darian-brown.com/pass-a-php-array-to-javascript-as-json-using-ajax-and-json_encode/ – Tom

2

Si está utilizando jQuery no es una solución muy simple a su enfoque como se puede ver aquí: http://api.jquery.com/jQuery.getJSON/.

De lo contrario, solo quiero que explique que no hay forma de acceder a su JSON directamente en JavaScript como lo intentó en el código anterior. El punto principal es que JavaScript se ejecuta en su navegador mientras su script PHP se ejecuta en su servidor. Entonces definitivamente debe haber una comunicación entre ellos. Entonces debe solicitar los datos del servidor a través de http que sugeriría.

HTH

+0

Pensé que la función .getJson es una función impulsada por Ajax que puede tomar datos Json de cualquier archivo. Realmente no estaba seguro de cómo usarlo, encuentro esto muy confuso. Aprecio tu respuesta sin embargo :) – Tom