Uncaught SyntaxError: Unexpected token < in JSON at position 0

publicado por: Anonymous

¿Cómo puedo solucionar el siguiente error?

Uncaught SyntaxError: Unexpected token < in JSON at position 0

En concreto es en la variable info que se parsea a un JSON. Me gustaría saber si hay alguna otra forma de hacerlo mediante xmlhttprequest o en qué estoy fallando.

Aquí les dejo el código correcto js y esto es lo que me ha dado de hacer console.log(response):

<br />
<b>Warning</b>:  mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in <b>C:xampphtdocsfacturacionsistemaajax.php</b> on line <b>215</b><br />
error

Voy a probar a intentar modificarlo y ahora digo si lo he arreglado.

Archivo js:

function searchForDetalle(id){
    var action = 'searchForDetalle';
    var user = id;

    $.ajax({
            url: 'ajax.php',
            method: 'POST',
            async: true,
            data: {action:action, user:user},

            success: function(response){
            console.log(response); 
            if(response != 'error'){
                    // var info = JSON.parse(JSON.stringify(response));
                    var info = JSON.parse(response);
                    $('#detalle_venta').html(info.detalle);
                    $('#detalle_totales').html(info.totales);

                }else{
                    console.log('no data');
                }    
            },

            error: function(error){
                console.log(error);
            }
        });
}

Archivo php:

//Extrae datos detalle_tmp
        if($_POST['action'] == 'searchForDetalle'){
            if(empty($_POST['user'])){
                echo 'error';
            }else{

                $token = md5($_SESSION['idUser']);

                $query = mysqli_query($conection, "SELECT tmp.correlativo, tmp.token_user, tmp.cantidad, tmp.precio_venta, p.codproducto, p.descripcion from detalle_tmp tmp INNER JOIN producto p ON tmp.codproducto = p.codproducto where token_user = '$token'");

                $result= mysqli_num_rows($query);

                $query_iva = mysqli_query($conection, "SELECT iva from configuracion");
                $result_iva = mysqli_num_rows($query_iva);

                $detalleTabla = '';
                $sub_total = 0;
                $iva = 0;
                $total = 0;
                $arrayData = array();

                if($result > 0){
                    if($result_iva > 0){
                        $info_iva = mysqli_fetch_assoc($query_iva);
                        $iva = $info_iva['iva'];
                    }

                    while($data = mysqli_fetch_assoc($query_detalle_temp)){
                        $precioTotal = round($data['cantidad'] * $data['precio_venta'],2);
                        $sub_total = round($sub_total + $precioTotal,2);
                        $total = round($total + $precioTotal, 2);

                        $detalleTabla .= '<tr>
                                            <td>'.$data['codproducto'].'</td>
                                            <td colspan="2">'.$data['descripcion'].'</td>
                                            <td class="textcenter">'.$data['cantidad'].'</td>
                                            <td class="textright">'.$data['precio_venta'].'</td>
                                            <td class="textright">'.$precioTotal.'</td>
                                            <td class="">
                                                <a href="#" class="link_delete" onclick="event.preventDefault(); del_product_detalle('.$data['codproducto'].');"><i class="far fa-trash-alt"></i></a>
                                            </td>
                                        </tr>';
                    }

                    $impuesto = round($sub_total * ($iva / 100), 2);
                    $tl_sniva = round($sub_total - $impuesto, 2);
                    $total = round($tl_sniva + $impuesto, 2);

                    $detalleTotales='<tr>
                                        <td colspan="5" class="textright">SUBTOTAL Q.</td>
                                        <td class="textright">'.$tl_sniva.'</td>
                                    </tr>
                                    <tr>
                                        <td colspan="5" class="textright">('.$iva.'%)</td>
                                        <td class="textright">'.$impuesto.'</td>
                                    </tr>
                                    <tr>
                                        <td colspan="5" class="textright">TOTAL Q.</td>
                                        <td class="textright">'.$total.'</td>
                                    </tr>';

                    $arrayData['detalle'] = $detalleTabla;
                    $arrayData['totales'] = $detalleTotales;

                    echo json_encode($arrayData, JSON_UNESCAPED_UNICODE);
                }else{
                    echo 'error';
                }
                mysqli_close($conection);
            }
            exit;
        }               

    }
    exit;

solución

parece que lo que te esta devolviendo al realizar el ajax no es el json que intentas pasar desde php, en el código

var info = JSON.parse(response);

debería parsearte correctamente el resultado que envías, prueba hacer antes de esa linea

console.log(response);

y ver con las herramientas de debug (que usualmente se activan con F12 desde el navegador) ver que devuelve, pues quízas estes recibiendo una pagina en vez de el json esperado, pues si fuera el json que estas enviando con json_enconde desde php, en el success al querer parsear no tiene que fallar.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *