Problem sending JSON by ajax to PHP

Asked

Viewed 180 times

1

I’ve been trying to solve this problem for a couple of days, and I saw some questions from this site, but none of them solve the problem. I’m putting Ajax in the login of my TCC, but it will not, no error. I’ve made a file_exists in the path of the requested file and you’re right. And if you can confirm if I’m getting the data right in PHP, because the examples I saw on the site were only with a value within JSON.

index php.

//coloquei só o script porque o código é longo.. (JQuery está incluso pelo bootstrap..
<script>
    function enviar() {

        var usuario = $("[name='txtu']").val();
        var senha = $("[name='txts']").val();
        //está chegando os valores
        console.log(usuario +'/'+ senha);
        $.ajax({
            url: "./controller_php/verificaLogin.php",
            type: "POST",
            data: {'usuario' : usuario, 'senha' : senha},
            dataType: "json"

        }).done(function (resposta) {
            console.log(resposta);
        }).fail(function () {
            // está caindo aqui sempre
            console.log("Falha");
        });
    }
</script>

verificaLogin.php

require_once './model_php/login.class.php';

if ($_POST) {
    $user = json_decode($_POST['usuario']);   
    $senha = json_decode($_POST['senha']);
    session_start();
    //coloquei isso pra testar em uma outra página para ver se estava ocorrendo o post, e na outra página mostra que a variável não foi criada.
    $_SESSION['a'] = $json;

    if (Login::logar($user, $senha)){
        $_SESSION['nome'] = $user;
        $cpf = Login::pegaCPFUsuario($user);
        $_SESSION['tipoUsuario'] = Login::pegaTipoUsuario($user);

        if ($_SESSION['tipoUsuario'] == 2) {
            $_SESSION['log'] = 'ativo';
            return true;
        } else {
            $_SESSION['log'] = 'ativoTecnico';
            return true;
        }
    } else {
        return false;
    }
}
  • 1

    You’ve already tested the line dataType: "json"... this line is saying that the return you expect is a JSON, and it seems to me that this is not happening and nor is the case.

  • I took it here and it’s still the same..

  • You’re falling into "fail," maybe you’re not finding your destination

  • Something else, return in else doesn’t make sense... if the first return run, it will surely not run the second, so it does not need to else. And you’re returning two return true in the same IF.. ELSE... just one return true after IF. Redundancies that could be avoided.

1 answer

6


Your code has some errors

if ($_POST)

The ideal was to check if all the parameters you need have been filled in

if(isset($_POST["usuario"], $_POST["senha"]))

That part is also incorrect

$user = json_decode($_POST['usuario']);   
$senha = json_decode($_POST['senha']);

json_decode expects to receive a json-shaped string, in your case it is just a common string sent by jquery, the correct thing would be to do only

$user = $_POST['usuario'];   
$senha = $_POST['senha'];
//coloquei isso pra testar em uma outra página para ver se estava ocorrendo o post, e na outra página mostra que a variável não foi criada.
$_SESSION['a'] = $json;

This is because the value passed to json_decode is incorrect, so it returns an empty string

this part could be edited as well

    if (Login::logar($user, $senha)){
    $_SESSION['nome'] = $user;
    $cpf = Login::pegaCPFUsuario($user);
    $_SESSION['tipoUsuario'] = Login::pegaTipoUsuario($user);

    if ($_SESSION['tipoUsuario'] == 2) {
        $_SESSION['log'] = 'ativo';
        return true;
    } else {
        $_SESSION['log'] = 'ativoTecnico';
        return true;
    }
} else {
    return false;
}

Staying:

    if (Login::logar($user, $senha)){
    $_SESSION['nome'] = $user;
    $cpf = Login::pegaCPFUsuario($user);
    $_SESSION['tipoUsuario'] = Login::pegaTipoUsuario($user);

    if ($_SESSION['tipoUsuario'] == 2) {
        $_SESSION['log'] = 'ativo';
        echo json_encode(["log" => "ativo"]);
    } else {
        $_SESSION['log'] = 'ativoTecnico';
        echo json_encode(["log" => "ativoTecnico"]);
    }
} else {
    echo json_encode(["log" => "não encontrado"]);
}

Notice that I changed the

return true;

to display the result of your request on the json screen AJAX cannot interpret php’s "Return true", only what is in the output, so its request does not return anything, because Return true does not display anything

The whole code would look like this:

require_once './model_php/login.class.php';

if(isset($_POST["usuario"], $_POST["senha"])) {
$user = $_POST['usuario'];   
$senha = $_POST['senha'];

session_start();
//coloquei isso pra testar em uma outra página para ver se estava ocorrendo o post, e na outra página mostra que a variável não foi criada.
$_SESSION['a'] = $json;

if (Login::logar($user, $senha)){
    $_SESSION['nome'] = $user;
    $cpf = Login::pegaCPFUsuario($user);
    $_SESSION['tipoUsuario'] = Login::pegaTipoUsuario($user);

    if ($_SESSION['tipoUsuario'] == 2) {
        $_SESSION['log'] = 'ativo';
        echo json_encode(["log" => "ativo"]);
    } else {
        $_SESSION['log'] = 'ativoTecnico';
        echo json_encode(["log" => "ativoTecnico"]);
    }
} else {
    echo json_encode(["log" => "não encontrado"]);
}
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.