JSON.parse: unexpected non-whitespace character after JSON data at line 1 column 13 of the JSON data

publicado por: Anonymous

Tengo un problema con el recibir un archivo JSON de un PHP a un Jquery:

SyntaxError: JSON.parse: unexpected non-whitespace character after JSON data at line 1 column 13 of the JSON data

En mi PHP tengo:

<?php
if(isset($_POST['id_parte'])){
$lista_productos = lista_productos('',$conn);
for ($i=0; $i < $lista_productos['count']; $i++) {
    if ($_POST['id_parte'] == $lista_productos[$i]['id_parte']['id']) {
        if ($lista_productos[$i]['status']!=66) {
            $listado = array('id'=>$lista_productos[$i]['id']);
            // $listado = $lista_productos[$i];
            echo json_encode($listado, JSON_FORCE_OBJECT);
        }
    }

}
}

Y el javascript es:

$.post(".carga_productos_filtro.php",{id_parte:id_parte},
    function(response){

        console.log(response);
        response = JSON.parse(response);


        $('#list_productos_'+id_parte).html("<h2>"+response+"</h2>");
    });

Y recibo esto en el console.log:

{"id":"108"}{"id":"109"}{"id":"110"}{"id":"113"}{"id":"114"}

Debería recibir más pero de momento si logro pasar a json esto me doy por satisfecho, ya después le añado mas cosas.

Lo que no entiendo es por qué del error ya que tengo hecho algo parecido de esta misma manera y funciona pero en este caso no, he de añadir que en el otro que lo tengo parecido en el console.log se ve como un array (y de color rosa) en cambio en este se ve como si fuera un variable más (y de color negro) y pues no se puede parsear a JSON.

Los errores ademas de en mi Script me los da tambien en lineas de Jquery

jquery-3.3.1.min.js:2:27452,

jquery-3.3.1.min.js:2:28202,

jquery-3.3.1.min.js:2:77649,

jquery-3.3.1.min.js:2:79907;

Ya siento el caso tan largo paro quiero ser claro desde el principio (añadir que utilizo el framework de PHP Smarty).

solución

El problema es que estás enviando al navegador varios JSON consecutivos (uno por cada iteración del bucle) en vez de un JSON con los todos los datos que quieres enviar. JSON consecutivos no forman un JSON válido.

Para hacerlo correctamente debes meter todos los datos en una única variable y enviarla una única vez:

<?php
if (isset($_POST['id_parte'])) {
    /* Datos a ser enviados al navegador */
    $listado = [];
    $lista_productos = lista_productos('', $conn);
    for ($i = 0; $i < $lista_productos['count']; $i++) {
        if ($_POST['id_parte'] == $lista_productos[$i]['id_parte']['id']) {
            if ($lista_productos[$i]['status'] != 66) {
                /* Agregamos el elemento a la matriz de listados */
                $listado[] = array(
                    'id' => $lista_productos[$i]['id'],
                );
            }
        }
    }
    /* Enviamos todos los datos de manera correcta una única vez */
    echo json_encode($listado, JSON_FORCE_OBJECT);
}
Respondido por: Anonymous

Leave a Reply

Your email address will not be published.