Ir ao conteúdo
  • Cadastre-se

Chamando método PHP com Ajax


Posts recomendados

Boa noite, pessoal.

Desculpe o post imenso, mas vamos lá. KKK"

Estou querendo implementar no meu projeto uma forma de chamar métodos do php sem precisar atualizar a página.

Obtive ótimos resultados quando se tratou de chamar um arquivo contendo o código, basicamente usando o php estruturado, mas o meu objetivo seria chamar um método dentro de uma class passando os parâmetros.

Eu tenho o seguinte código em ajax e jQuery:

<script>
function verificar(email){
    var email;
    if(email == null)
        email = "";
    $.ajax({
        type: 'POST',
        url: "teste.php",
        dataType: 'html',
        beforeSend: function () {
            $("#dados").html("Verificando...");
        },
        data: {email:email},
        success: function (msg){
            $("#dados").html(msg);
        }
    });
}

$('#email').focusout(function () {
    verificar($("#email").val())
});
</script>

Formulário HTML:

<div id="cadastrar" class="menudrop">
  <ul>
    <li><h2 class="upper text-center" style="color: rgb(0,129,128)">Cadastrar</h2></li>
    <li class="text-center" style="color: rgb(255,224,78)"><span>Preencha os campos para poder cadastrar</span></li><br />
    <form method="POST">
    <li><input type="text" maxlength="11" name="nome" placeholder="Insira seu Nome" required/></li>
    <li><input type="text" maxlength="25" name="sobrenome" placeholder="Insira seu Sobrenome" required/></li>
    <li class="text-center"><input id="email" maxlength="25" type="email" name="email" placeholder="Insira seu Email" required/><div id="dados"></div></li>
    <li><input type="password" name="senha" maxlength="25" placeholder="Insira sua senha" required/></li>
    <li><input type="password" name="senha2" maxlength="25" placeholder="Confirme sua senha" required/></li>
    <li class="text-center"><input name="cadastrar" id="confirma" type="submit" value="Cadastrar!" class="jacy menulog menures" disabled/></li>
    <a class="jacy" id="cadfechar" style="text-decoration:none;" href="#"><li class="menures">&laquo; Voltar</li></a>
    </form>
  </ul>
</div>

código em PHP:

<?php
//Metodo para a verificação instantânea, ainda precisa ser passado a LOO!
class teste{
	public function insta($email){
require_once 'usuario.php';
$email = $_POST['email'];
$sql = "SELECT email FROM usuarios WHERE email LIKE '%{$email}%'";
$stmt = banco::getConecta()->prepare($sql);
$stmt->execute();
$qtd = $stmt->rowCount();
    if($qtd){
    ?>
<script>
$('.rbutton').ready(function() {
    $('#confirma').prop("disabled", true);
});
</script>
<span style="color: red;">Este email já esta sendo utilizado ou está em formato incorreto!</span>

    <?php } else {?>
<script>
$('.rbutton').ready(function() {
    $('#confirma').prop("disabled", false);
});
</script>
<?php }
}
}

A conexão com o banco de dados funciona perfeitamente, se eu retirar o class e a function, o código traz exatamente o que eu quero, mas eu preciso que ele esteja dentro da class e seja uma function.

Eu sei onde esta o problema, só não consigo arrumar, já pesquisei muuuito, mas não consegui resultados e nem sei se é possível.

O erro esta no ajax, ele envia os parâmetros mas não manda executar algo, seria na linha:
        data: {email:email},

Eu preciso passar algo a mais, mas não sei o que é.

Alguém teria algum meio pra fazer isso ? No que estou errando ?

Muito obrigado pela paciência, quem puder ajudar ou dar sugestões, eu agradeço.   ^^

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Will871 Olá,  pelo que entendi, você quer acessar função insta($email)  contida no php de forma assíncrona. Só que esta função pertence a uma classe.

 

Se for isso, pode ser que você não esteja instanciando o objeto da classe.

Tente desta maneira:

Crie um arquivo chamado  class.teste.php  e cole o seguinte trecho:

class Teste{
	public function insta($email){
require_once 'usuario.php';
$this->email = $email;
$sql = "SELECT email FROM usuarios WHERE email LIKE '%{$email}%'";
$stmt = banco::getConecta()->prepare($sql);
$stmt->execute();
$qtd = $stmt->rowCount();
    if($qtd):
       echo "
            <script>
            $('.rbutton').ready(function() {
              $('#confirma').prop('disabled', true);
            });
            </script>
            <span style='color: red;'>Este email já esta sendo utilizado ou está em formato incorreto!</span>";

    else: 
      echo" 
         <script>
         $('.rbutton').ready(function() {
            $('#confirma').prop('disabled', false);
         });
         </script>";
   endif; 
   }
}

No seu teste.php  você instancia o objeto.  Este é o arquivo que você chama lá no jQuery 

 

<?php
   //Chama a classe que contem a função 
  include 'class.teste.php';

   //instancia o objeto de classe
   $teste = new Teste;

   $email = $_POST['email'];

   //executa a função da classe  
   $teste->insta($email);
?>
 
    

 

Sugiro que você atualize para as novas funções do jQuery ajax. O success  agora não é mais um atributo.

virou uma função chamada done().

 

Link para o comentário
Compartilhar em outros sites

@DiF Perfeito! Simplesmente perfeito!
Muito obrigado, ajudou muito!

Não imaginei que seria tão simples, foi falta de atenção minha, achei que fosse erro do ajax.

Vou dar uma olhada nessa dica, pretendo evoluir esse código.

Se puder dar mais umas dicas sobre ajax, eu agradeço.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Moderador

@Will871

1 hora atrás, Will871 disse:

Se puder dar mais umas dicas sobre ajax, eu agradeço.

Sim!

Por exemplo no seu jQuery no ajax o retorno(callback) de success agora virou  uma função done().

Como o jQuery é encadeado, você pode chamar a função depois da própria função do ajax.

Assim:

<script>
function verificar(email){
    var email;
    if(email == null)
        email = "";
    $.ajax({
        type: 'POST',
        url: "teste.php",
        dataType: 'html',
        beforeSend: function () {
            $("#dados").html("Verificando...");
        },
        data: {email:email}
    }).done(function(msg){
         $("#dados").html(msg);
    }).fail(function(msg){
        //mensagem de erro. você faz a verificação lá no php
        //e retorna aqui. O fail() pode ser omitido se quiser.
    });
}

$('#email').focusout(function () {
    verificar($("#email").val())
});
</script>

PS:  Baixe a versão mais recente do jQuery  v. 3.2.1

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!