Ошибка запроса данных с json


у меня есть проблема с запросом данных с json из формы, которая показывает мне эту ошибку: Uncaught SyntaxError: Unexpected end of JSON input at JSON.parse () at XMLHttpRequest.xhr.onload (форма. js: 52) Чем это может быть связано? Спасибо

modelo-admin.php

    <?php

$accion = $_POST['accion'];
$password = $_POST['password'];
$usuario = $_POST['usuario'];



if($accion === 'login'){
    include '../funciones/conexion.php';
    try {
        $stmt = $conn->prepare("SELECT usuario, id, password FROM usuarios WHERE usuario = ?");
        $stmt->bind_param('s', $usuario);
        $stmt->execute();
        //Loguear el usuario
        $stmt->bind_result($nombre_usuario, $id_usuario, $pass_usuario);
        $stmt->fetch();
        $respuesta = array(
            'respuesta' => 'correcto',
            'nombre' => $nombre_usuario,
            'id' => $id_usuario,
            'pass'=> $pass_usuario,
            'columnas' => $stmt->affected_rows
        );
        $stmt->close();
        $conn->close();
    } catch(Exception $e) {
        //En caso de un error, tomar la excepcion
        $respuesta = array(
        'pass' => $e->getMessage()
        );
    }
}

js:

//  Leyendo los datos del formulario de crear usuario con JavaScript y Validando
eventListeners();

function eventListeners(){
    document.querySelector('#formulario').addEventListener('submit', validarRegistro);
}
function validarRegistro(e){
    e.preventDefault();

    var usuario = document.querySelector('#usuario').value, //uso coma para declarar varias variables
        password = document.querySelector('#password').value,
        tipo = document.querySelector('#tipo').value;

    if(usuario === '' || password === ''){
        swal({
            type: "error",
            title: "Error",
            text: "Los 2 campos son obligatorios"
        });
    } else {            
        //datos  que se envian al servidor
        var datos = new FormData();
        datos.append('usuario', usuario); 
        datos.append('password', password);
        datos.append('accion', tipo);

        console.log(datos.get('usuario'));

        //crear el llamado a ajax
        var xhr = new XMLHttpRequest();

        //abrir la conexion
        xhr.open('POST', 'inc/modelos/modelo-admin.php', true);

        //retorno de datos
        xhr.onload = function(){
            if(this.status === 200){
                var respuesta = JSON.parse(xhr.responseText);

                console.log(respuesta); //ESTA ES LA PARTE QUE ESTA MOSTRANDO  EL ERROR Uncaught SyntaxError: Unexpected end of JSON input at JSON.parse (<anonymous>)
                //Si la respuesta es correcta
                if(respuesta.respuesta === 'correcto'){
                    //si es un nuevo usuario
                    if(respuesta.tipo === 'crear'){
                        swal({
                            title: 'Usuario Creado',
                            text: 'El usuario se creó correctamente',
                            type: 'success'
                        });
                    }
                } else {
                    //Hubo un error
                    swal({
                        title: 'Error',
                        text: 'Hubo un error',
                        type: 'error'
                    })
                }

            }
        }

        //Enviar la peticion
        xhr.send(datos);
    }

}
Author: RicardoKra, 2018-07-30

1 answers

Вам не хватает возврата ответа из бэкэнда в формате json

try {
 ...
 $respuesta = array(
        'respuesta' => 'correcto',
        'nombre' => $nombre_usuario,
        'id' => $id_usuario,
        'pass'=> $pass_usuario,
        'columnas' => $stmt->affected_rows
    );

    echo json_encode($respuesta);

} catch(Exception $e) {
    //En caso de un error, tomar la excepcion
    $respuesta = array(
    'pass' => $e->getMessage()
    );

    echo json_encode($respuesta);
}

И убедитесь, что ответ UTF8, иначе json_encode напишет null.

PS: простой echo $respuesta вызовет ошибку array to string conversion. Вот почему вы должны использовать json_encode.

 3
Author: ffflabs, 2018-07-30 12:48:49