Solucionado (ver solução)
Solucionado
(ver solução)
16
respostas

Erro ao listar dados tabela

Boa tarde estou com o seguinte erro: Tenho duas pastas uma neppo e outra cleinte api . O cliente api é meu front e neppo meu back. No meu front tenho um form para inserção de dados porem no mesmo front necessito que mostre na tabela os dados do meu banco.

Observação: Ta inserido no banco perfeitamente . O ajax tbm esta funcionando aparentemente. Mas não exibe os dados no meu front.

Meu front : http://localhost/neppo/cliente-api/ Meu back : http://localhost/neppo/slim/api.php/cadastro (lista tudo que insiro no banco)

<?php

require_once 'vendor/autoload.php';

$app = new \Slim\Slim();

$db = new mysqli("localhost","root","","neppo");

$app->get("/cadastro",function() use($db,$app) {
    $query = $db->query("SELECT * FROM cadastro");
    $cadastro = array();
    while($fila=$query->fetch_assoc()){
        $cadastro[]=$fila;
    }

    echo json_encode($cadastro);
});

/*link =  aqui se ve os dados  http://localhost/slim/api.php/cadastro */

$app->post("/cadastro",function() use($db,$app){

    $query="INSERT INTO cadastro VALUES(NULL,"
    . "'{$app->request->post("nome")}',"
    .         "'{$app->request->post("data")}',"
    .         "'{$app->request->post("cpf")}',"
    .         "'{$app->request->post("sexo")}',"
    .         "'{$app->request->post("endereco")}'"
    .     ")";
    $insert = $db->query($query);

    if($insert){
        $result = array("STATUS" => "true", "message" => "Cadastro Realizado Corretamente!!!");
    }else{
        $result = array("STATUS" => "false", "message" => "Cadastro não realizado corretamente!!!");
    }

    echo json_encode($result);

});


$app->run();
<!DOCTYPE html>
<html lang="pt">

  <head>

    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="description" content="">
    <meta name="author" content="">

    <title>Freelancer - Start Bootstrap Theme</title>

    <!-- Bootstrap core CSS -->
    <link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">

    <!-- Custom fonts for this template -->
    <link href="vendor/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css">
    <link href="https://fonts.googleapis.com/css?family=Montserrat:400,700" rel="stylesheet" type="text/css">
    <link href="https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic" rel="stylesheet" type="text/css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
  <script>
      JSON.parse = JSON.parse || function(str){
        if (str === "")
            str = '""';
          eval("var p="+ str +";");
          return p;
      };

      $(document).ready(function(){
         function getCadastro(){
             $.ajax({
               url: "http://localhost/neppo/slim/api.php/cadastro",
               type: "get",
               success: function(response) {
                 $.each(JSON.parse(response), function(i, index){
                   if (index.id.lenght){
                     $(".table").append("<tr><td>"+ index.id +"</td>"+
                                        "<td>"+ index.nome +"</td>"+
                                        "<td>"+ index.data +"</td>"+
                                        "<td>"+ index.cpf +"</td>"+
                                        "<td>"+ index.sexo +"</td>"+
                                        "<td>"+ index.endereco+"</td>"+
                                        "<td><span class='delete btn btn-danger' data-cadastro='"+index.id+"'>Apagar</span></td>"+
                                        "<td><span class='update btn btn-warning' data-cadastro='"+index.id+"'>Editar</span></td>"+
                                        "</tr>");

                                  }

                    });
                  }
                });
              }
         getCadastro();
  });

 </script>

  </head>

        <!-- Contact Section -->
        <section id="cadastro">
            <div class="container">
              <h2 class="text-center text-uppercase text-secondary mb-0">Cadastre</h2>
              <hr class="star-dark mb-5">
              <div class="row">
                <div class="col-lg-8 mx-auto">

                  <form action="http://localhost/neppo/slim/api.php/cadastro" method="post" data-producto="0">

                    Nome:
                    <input type="text" id="name_form" name="nome" class="form-control"/></br>

                    Data:
                    <input type="text" id="data_form" name="data" class="form-control"/></br>  

                    CPF:
                    <input type="text" id="data_cpf" name="cpf" class="form-control"/></br>
16 respostas

Na rota /cadastro você colocou json_encode($cadastro);. Você chegou a entrar nesta rota através do navegador e visualizar os dados cadastrados no DB?

Simmm. Esta aparecendo os dados sempre que cadastro na rota : http://localhost/neppo/slim/api.php/cadastro

pode visualizar a imagem aqui : https://pt.stackoverflow.com/questions/264361/erro-gerar-dados-tabela?noredirect=1#comment542216_264361

Beleza.

Troque

 echo json_encode($cadastro);

por

 return json_encode($cadastro);

Após isto, faça um console.log(response) em success para saber se os dados estão chegando.

OBS: Remova todo o código que você está usando para adicionar na Table. Faça o seguinte, deixe toda sua requisição Ajax no body, pois a página irá carregar e após isto, irá executar os scripts.

Fica tela branca os dados

No console.log aparece algo? Acontece algum error?

Quando coloco var dump aparece os dados lá como alterado da forma que falou. No caso aparece so na url que estava em branco, Console log nao da sinal de vida kkkk

$app = new \Slim\Slim();

$db = new mysqli("localhost","root","","neppo");

$app->get("/cadastro",function() use($db,$app) {
    $query = $db->query("SELECT * FROM cadastro");
    $cadastro = array();
    while($fila=$query->fetch_assoc()){
        $cadastro[]=$fila;
        var_dump($cadastro);
    }

    return json_encode($cadastro);

});

Nicolle, deixe echo json_encode($cadastro);, pois o return não irá retornar nenhuma resposta caso seja feito um ajax. (Estou acostumado com NodeJS hehe).

Após fazer isto, veja o console.log novamente.

Aparece isso no console:

   at JSON.parse (<anonymous>)
    at Object.success ((index):45)
    at i (jquery.min.js:2)
    at Object.fireWith [as resolveWith] (jquery.min.js:2)
    at A (jquery.min.js:4)
    at XMLHttpRequest.<anonymous> (jquery.min.js:4)

index 45:

    $.each(JSON.parse(response), function(i, index){

Remova o $.each.

Faça assim:

$.ajax({
        url     :   'http://localhost/neppo/slim/api.php/cadastro',
        type    :   "GET",
        success :   function(res){
          console.log(res);
        }
 });

Com o var dump aparece no console cliente-api e na url. Quando tiro o var dump nao aparece nada

Nicolle, é possível colocar seu projeto no github?

Matheus deu certo no console agora que vi que esqueci de alterar. Ta funcionando o console. log agora como retorno?

Vou por la e ja passo o link

Como você está retornando JSON, acredito que não seja necessário usar JSON.parse.

Se você conseguiu visualizar os dados no console.log, então agora você pode montar sua Tabela :)

Oi Mateus Apareceu os dados porem parece um loop de for e indefinido.

Coloquei no Dropbox: https://www.dropbox.com/sh/dqema4xfdcmbbdd/AABlXPTbdCy5y9ETgCK5uy6Pa?dl=0

  <script>
      JSON.parse = JSON.parse || function(str){
        if (str === "")
            str = '""';
          eval("var p="+ str +";");
          return p;
      };

      $.ajax({
        url     :   'http://localhost/neppo/slim/api.php/cadastro',
        type    :   "GET",
        success :   function(res){
          for(var i=0;res.length>i;i++){
                     $(".tabela").append("<tr><td>"+ res.id +"</td>"+
                                        "<td>"+ res.nome +"</td>"+
                                        "<td>"+ res[i].data +"</td>"+
                                        "<td>"+ res[i].cpf +"</td>"+
                                        "<td>"+ res[i].sexo +"</td>"+
                                        "<td>"+ res[i].endereco+"</td>"+
                                        "<td><span class='delete btn btn-danger' data-cadastro='"+res[i].id+"'>Apagar</span></td>"+
                                        "<td><span class='update btn btn-warning' data-cadastro='"+res[i].id+"'>Editar</span></td>"+
                                        "</tr>");

                                      }

                                    }
      });

 </script>
solução!

Nicolle, tenho certeza que você fez o Upload do projeto errado hehe...

Digo isto porque no Projeto continha arquivos .jsp e classes Java.

Anyway...


Fiz um exemplo bem tosco, mas acredito que você irá entender o conceito.

Link: mediafire

Observações

  • Não usei JQuery, fiz usando Vanilla JS
  • O código está feio / zuado, pois estou sem tempo de fazer algo legal.
  • Usei PHP Puro, nada de Slim Framework, contudo, o conceito é o mesmo :)

Páginas

  • index.html -> Formulários simples com 2 campos
  • create.php -> Realizar Query - Insert
  • show.php -> Realizar Query - Select
  • tabela.html -> Fazer requisição Ajax para buscar os dados que está sendo retornado na página show.php

Matheus obg pela ajuda :)