6
respostas

Ajax não está passando os parâmetros para o PHP

Boa noite, estou tentando passar parâmetros do ajaxa para o php mas não está dando certo. ele entra direto no error, ou seja, está chamando a função entrar mas por algum motivo está dando erro na hora de passar os parâmetros.

meu código AJAX

var log = {

entrar: function (){
    $.ajax({
        type:"POST",
        url: "logar.php",

        data: {

        acao: 'logando',
        usuario: $("#usuario").val(),
        senha: $("#senha").val()
    },

    dataType: "json",
    success: function(json){
        if(json.result == true){
            alert(json.msg);
        }
    },

    error: function(){
        alert("Erro ao enviar dados");

    }

    });
}

}

meu código php

<?php


 $resultado=$_SERVER['REQUEST_METHOD'] ? "POST" $_POST : "GET" $_GET; 

 switch($resultado['acao']){
     case 'logando'
     $senha=$resultado['senha'];
     $usuario=$resultado['usuario'];

     $dadosjson['result']=true;
     $dadosjson['msg']="foi";
     echo json_encode($dadosjson);
     break;
 }



 ?>

A chamada do javaScript no botão

<button class="btn btn-lg btn-primary btn-block" id="entrar"  onclick="log.entrar();">Entrar</button>
6 respostas

Eu recomendaria você fazer um teste sem o AJAX para validar que o seu arquivo login.php está retornando valores corretamente. Faça o seguinte teste, crie um arquivo HTML que poste direto para ele.

<form method="POST" action="login.php">
    <p>Usuario:<input type="text" name="usuario"> </p>
    <p>Senha:<input type="text" name="senha"> </p>
    <input type="submit" value="Enviar">
    <input type="hidden" name="acao" value="logando">
</form>

Caso o teste funcione, o problema pode estar no HTML, perceba que para criar a variável usuário você faz isso:

 usuario: $("#usuario").val()

No seu HTML, deve existir algo assim:

<input type="text" name="usuario" id="usuario">

No seu AJAX, você está recuperando os dados pelo "ID" do input. Mas, ao postar para o PHP, ele vai pegar os dados com base no "name" do input.

O seu código abaixo está errado:

$resultado=$_SERVER['REQUEST_METHOD'] ? "POST" $_POST : "GET" $_GET;

Esse if ternário está sendo usado de forma errada. Utilize a variável $_POST em vez de fazer isso;

Outra coisa é mudar o cabeçalho da página para retornar json e não html (que é o padrão).

 header('Content-Type: application/json; charset=utf-8');

Lembrando sempre de passar as strings em utf8.

Exemplo:

<?php

header('Content-Type: application/json; charset=utf-8');

$dadosjson=array();

switch($_POST['acao']){
    case 'logando'
        $senha=$_POST['senha'];
        $usuario=$_POST['usuario'];

        $dadosjson['result']=true;
        $dadosjson['msg']=utf8_encode("foi");
        break;
}

echo json_encode($dadosjson);
?>

Olá Marcos Vinícius, fiz desse jeito e não deu certo

Daniel se eu enviar os parâmetros direto do html para o php dá certo

pessoal eu consegui. O meu problema estava no meu arquivo logar.php

Como ficou o meu arquivo logar.php

<?php


$dadosjson=array();
$x=$_POST['acao'];

switch ($x) {
  case 'logando':
    $usuario= $_POST['usuario'];
    $senha= $_POST['senha'];

    $dadosjson['result']=true;
    $dadosjson['msg']="FOI";
    echo json_encode($dadosjson);
    break;

  default:
    # code...
    break;
}
 ?>

Faltou o default no switch também né? Qualquer outra dúvida só falar.

Sim faltou o default kkkkkkkkkkkkkkkkkk