entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

¿Cómo hacer la consulta de un JSON?

Hola necesito ayuda con la consulta de un webservice, intento hacer un consumo del mismo a través de .getJSON pero me marca el siguiente error: Uncaught SyntaxError: Unexpected token :.

Al parecer es el JSON por el cuál me da ese error pero no se porque lo hace, ya comprobé y el JSON está bien estructurado, espero que me puedan ayudar y gracias.

Dejo el código completo aquí:

<html>
<head>
    <title>Cliente WS</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
    <script type="text/javascript">
        var JSON = "http://dark6425.0lx.net/webservice/cafe/select.php?categoria=PO";

        $.getJSON(JSON + '&callback=?', function (info) {

            var dato_01 = info.data[0].nombre;
            var dato_02 = info.data[0].categoria;
            var dato_03 = info.data[0].clave;

            console.log(dato_01);
        });
    </script>
</head>
<body>
</body>
</html>

1 Respuesta

3votos

magarzon Puntos30650

Hola.

El JSON está bien, pero el error no te lo está dando por el JSON, si no por cómo realizas la llamada.

Al utilizar el parámetro "&callback=?" estás haciendo que lo que se pida sea un JSONP (supongo que lo haces para evitar problemas con Cross Domain y tal), por lo que el servidor que te proporciona el JSON no tiene que devolverte el JSON, sin más.

Al utilizar JSONP, lo que se hace, tal y como establece el estándar, es ejecutar la respuesta como si fuera un javascript.

Por tanto, al intentar ejecutar ese JSON como un javascript es cuando te da el error.

Lo que tienes que hacer (si quieres seguir usando JSONP y no complicarte con Cross Domain) es que en el php que te devuelve el JSON hacer algo así:

header("content-type:application/json");
    if ($_GET['callback']) { //Aquí es donde recoges del parámetro callback cómo se debe llamar la función que "anexas" al JSON
        print $_GET['callback']."(";
    }
    print json_encode($json);  //Suponemos que $json tiene el contenido del json
    if ($_GET['callback']) {
        print ")";
    }

Como pongo en los comentarios del código, el nombre de la función que se debe llamar cuando se responde, y que por tanto hay que encapsular el json dentro de ella, viene dado por el parámetro callback (que al poner callback=? el sistema te lo "autorellena", si quisieras tener un nombre fijo deberías usar $.ajax y pasar el parámetro jsonCallback con el nombre de la función)

Saludos.

1voto

Dark6425 comentado

Muchas gracias si me funcionó.
Tenía una noción de que ese era el error (el JSON se estaba interpretando como JS) pero no sabia como resolverlo.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta