Fail on request data with json

1

I have a problem with a data request with json from a form that shows me this error: Uncaught SyntaxError: Unexpected end of JSON input     at JSON.parse ()     at XMLHttpRequest.xhr.onload (form.js: 52) What could be due? Thanks

the model-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()
        );
    }
}

the 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);
    }

}
    
asked by RicardoKra 30.07.2018 в 12:15
source

1 answer

3

You need to return the response from the backend in json

format
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);
}

And make sure the answer is UTF8, otherwise the json_encode will write a null.

PD: a simple echo $respuesta will trigger the error array to string conversion . That's why you should use json_encode .

    
answered by 30.07.2018 / 14:48
source