WordPress com AJAX não funcionando


(gtw) #1

No meu site, através de um form eu envio/cadastro informações no banco, faço um SELECT/consulta e retorno a última tabela gravada no banco, justamente a que o usuário acabou de inserir no form (junto com mais algumas informações que vem do banco).

Como eu quero exibir estes valores que vem do banco num modal é necessário que a página não dê o refresh, para isso eu inseri o AJAX da seguinte maneira:

MEU AJAX:

$(document).ready(function(){
  $('#enviar').click(function(){
      $.ajax({
      //CHAMA O AJAX DO WORDPRESS 
      url: 'wp-admin/admin-ajax.php',
      type: 'POST',              
      //CADASTRA, FAZ A CONSULTA E IMPRIME PARA O USUÁRIO      
      data: 'action=prancha',                  
      error: function(){
          alert('ERRO!!!');
      },
      //CASO A OPERAÇÃO TENHA ÊXITO, IMPRIMA O RESULTADO NA DIV RESULTADO
      success: function(data){
          $('#resultado').html(data);
      }               
  });
});
});

MEU FUNCTIONS.PHP:

function prancha(){
  header('Content-Type: text/html; charset=utf-8');

  include "../../../wp-config.php";

     
      /* SE OS VALORES FOREM VÁLIDOS, INSERE NO BANCO DE DADOS  */
  $nome = "";
  $email = "";
  $estilo = "";
  $experiencia = "";
  $altura = "";
  $peso = "";

  // VALIDAÇÃO DAS VÁRIÁVEIS 
  if(!empty($_POST)){     
     $nome = $_POST['nome'];
     $email = $_POST['email'];
     $estilo = $_POST['estilo'];
     $experiencia = $_POST['experiencia'];
     $altura = $_POST['altura'];
     $peso = $_POST['peso'];
 
     cadastra_usuario($nome, $email, $estilo, $experiencia, $altura, $peso);
 }


  //INSERE NO BANCO NOME, EMAIL, ESTILO, EXPERIÊNCIA, ALTURA E PESO NA TABELA CORRESPONDENTE
function cadastra_usuario($nome, $email, $estilo, $experiencia, $altura, $peso){          

     global $wpdb;
     
    $table = 'dados_usuario';
   
    $data = array(      
      'nome' => $nome,
      'email' => $email,
      'estilo' => $estilo,
      'exp' => $experiencia,
      'altura' => $altura,
      'peso' => $peso,
    );

    $updated = $wpdb->insert( $table, $data );

    if ( ! $updated ) {
      $wpdb->print_error();
    }

}



//CONECTA COM O BANCO PARA FAZER O SELECT
include "banco.php";

  function BuscaAlgo($conexao){

  // SELECT DE CONSULTA + INNER JOIN NO BANCO
 $query = "SELECT  USU.usuario,
                   USU.nome,
                   USU.exp,
                   USU.altura,
                   USU.peso,
                   PRAN.exp_ref,
                   PRAN.altura_ref,
                   PRAN.peso_ref,
                   PRAN.tipo_prancha,
                   PRAN.tamanho_prancha, 
                   PRAN.meio_prancha, 
                   PRAN.litragem_prancha       
                    FROM DADOS_USUARIO AS USU 
                         INNER JOIN PRANCHA AS PRAN
                             on USU.exp = PRAN.exp_ref
                              WHERE USU.altura = PRAN.altura_ref
                                AND USU.peso = PRAN.peso_ref
                                  ORDER BY USU.usuario DESC LIMIT 1";
     


  $resultado = mysqli_query($conexao,$query);

  $retorno = array();

  while($experiencia = mysqli_fetch_assoc($resultado)){
    $retorno[] = $experiencia;
  }

 return $resultado;
}


//IMPRIME A CONSULTA PARA O USUÁRIO      
$resultado = array();
$resultado = BuscaAlgo($conexao);

foreach($resultado as $valor){
    echo $valor["usuario"]; print(".  .  .  ."); 
    echo $valor["nome"]; print(".  .  .  ."); 
    echo $valor["exp"]; print(".  .  .  ."); 
    echo $valor["altura"]; print(".  .  .  ."); 
    echo $valor["peso"]; print(".  .  .  ."); 
    print("///////");
    echo $valor["tipo_prancha"]; print(".  .  .  ."); 
    echo $valor["tamanho_prancha"]; print(".  .  .  ."); 
    echo $valor["meio_prancha"]; print(".  .  .  ."); 
    echo $valor["litragem_prancha"];  
}  
 

    die(); //FINALIZANDO A EXECUÇÃO
}
//Adiciona a funcao extra votos aos hooks ajax do WordPress.
add_action('wp_ajax_prancha', 'prancha');
add_action('wp_ajax_nopriv_prancha', 'prancha');

O código está comentando, basicamente eu fiz:

AJAX:


  • No campo URL chamo o admin-ajax.php nativo do Wordpress.

  • No campo DATA chamo a função que faz o cadastro, a consulta e exibe para o usuário.

  • No campo SUCCESS, imprime o valor de data.

FUNCTIONS: Faço o código de cadastro, faço a consulta no banco e imprimo na tela com o echo.

Esta sendo retornado a mensagem de erro do próprio AJAX error: function(){ alert('ERRO!!!');},

Como posso resolver isso?
O que eu estou fazendo de errado?

obs1: Quando eu insiro o código que está no meu functions, o código de cadastro, consulta e exibição direto no meu footer, ele funciona. Logo, pode-se entender que o erro não está nem na inserção, nem na consulta e nem na exibição dos dados.

obs2: As informações eu quero exibir dentro de um modal do boostrap. De início eu estou apenas exibindo na tela, para verificar que está tudo OK. Depois disso eu vou pesquisar sobre como colocar esses dados dentro do modal, mesmo não sendo o assunto principal do post, sugestões de como fazer isso também são bem vindas.


(Garbim) #2

Se sua função ajax está caindo no error, o problema está no retorno da requisição ajax.