Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

will.martins.82

Consulta MSQL com ANGULARJS

Recommended Posts

Olá!

Estou, a poucas semanas, estudando Angularjs.

Estou tentando fazer uma consulta no Mysql, mas, aparentemente, está imprimindo a quantidade de caracteres no resultado.

Usei como base esse tutorial (https://guerrati.wordpress.com/2016/06/08/angularjs-paginacao-no-ng-repeat/), que está funcionando o problema é quando tento consultar o BD.

bd.php

-------------------------

try{
$conn= new PDO( 'mysql:host=' . MYSQL_HOSTDB. ';dbname=' . MYSQL_BASEDB, MYSQL_USERDB, MYSQL_PASSDB);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch ( PDOException $e ){
echo 'Erro ao conectar com o MySQL: ' . $e->getMessage();
}
$sql = $conn->query("SELECT * FROM funcionarios");
$rs = $sql->fetchAll(PDO::FETCH_ASSOC);
foreach($rs as $row){
$dados .= "{nome:'".$row[nomeFunc]."'},";
}
$dados = substr($dados,0,-1); // retirar a virgula do final do ultumo registro.
$dados='['.$dados.']';
//specifique-se que o conteúdo é do JSON - AngularJS vai gostar disso :D
header('Content-Type: application/json');
//Por fim, transforme o array em JSON e termina a execução.
echo json_encode($dados);
===================
app.js
---------------------
ar app = angular.module('guerraTI', ['angularUtils.directives.dirPagination']);
app.controller('listarDados', function($scope, $http){
});
app.controller('listarDados', function($scope, $http){
$scope.dados = []; //declara uma array vazia com o nome 'dados'
$scope.dados = response;
});
});
-----------------------
<html ng-app="guerraTI">
<head>
<title>Angular JS - Paginação</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div class="container">
<div class="col-md-12">
<table class="table" ng-controller="listarDados">
<thead>
<tr>
<th>
<form class="form-inline">
<div class="form-group">
<input type="text" ng-model="procurar" class="form-control" placeholder="Procurar...">
</div>
</form>
</th>
</tr>
<tr>
<th ng-click="ordenar('nome')">Nome</th>
</tr>
</thead>
<tbody>
<tr dir-paginate="dado in dados|filter:procurar|orderBy:sortKey:reverse|itemsPerPage:1">
<td>{{dado.nome}}</td>
</tr>
</tbody>
<tbody>
<tr>
<td><dir-pagination-controls max-size="5" boundary-links="true"></dir-pagination-controls></td>
</tr>
</tbody>
</table>
</div>
</div>
<script src="app.js"></script>
<script src="dirPagination.js"></script>
</body>
</html>

==========================================

Resultado quando rodo o bd.php

"[{nome:'William ******* Martins'},{nome:'Marcela ******* Martins'},{nome:'Arthur ******* Martins'},{nome:'teste04'},{nome:'teste05'},{nome:'teste06'},{nome:'teste07'},{nome:'teste08'},{nome:'teste09'},{nome:'teste10'},{nome:'teste11'},{nome:'teste12'},{nome:'teste13'},{nome:'teste14'},{nome:'teste15'}]"

==========================================

Resultado quando rodo listar.php

Nome

Eu coloquei para por um registro por página. Ele retorna 322. Aproximadamente a mesma quantidade de caracteres que tem no resultado do bd.php. (Se forem contar vai da mais q no bd.php porque no meu aparece os nomes completos.)

Podem me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Substitui isso:
$sql = $conn->query("SELECT * FROM funcionarios");
$rs = $sql->fetchAll(PDO::FETCH_ASSOC);
 
 
foreach($rs as $row){
	$dados .= "{nome:'".$row[nomeFunc]."'},";
}
$dados = substr($dados,0,-1); // retirar a virgula do final do ultumo registro.
 
$dados='['.$dados.']';
 
//specifique-se que o conteúdo é do JSON - AngularJS vai gostar disso :D
header('Content-Type: application/json');
 
//Por fim, transforme o array em JSON e termina a execução.
echo json_encode($dados);

Por isso:

$sql = $conn->query("SELECT * FROM funcionarios");
$funcionarios = $sql->fetchAll(PDO::FETCH_ASSOC);



//specifique-se que o conteúdo é do JSON - AngularJS vai gostar disso :D
header('Content-Type: application/json');
 
//Por fim, transforme o array em JSON e termina a execução.
echo json_encode($funcionarios);

Não faz tentar tratar um json antes de transformar ele em json xD

A partir dai da um console.log(ajax)

(do lado javascript da força)

Exemplo no seu controller:

app.controller('listarDados', function($scope, $http){
    $scope.dados = []; //declara uma array vazia com o nome 'dados'
    $http.get("dados.json").success(function(response){
	
		//Debbug do lado do client xD
		console.log(response);
		
	
        $scope.dados = response;
    });
    $scope.ordenar = function(keyname){
        $scope.sortKey = keyname;
        $scope.reverse = !$scope.reverse;
    };
});

Assim você entende melho :)

Outra dica que dou para performasse e entendimento é evitar o uso do

SELECT * FROM ...

Passe sempre os campos.

SELECT id, nome, email FROM

Assim do lado do JSON você sabe.... sem precisar acessar a base (ou dar um desc)

que você deveria receber... um

id, nome, email

Edit:

Outra dica final, debugar o request/response da requisição HTTP.

https://github.com/gabrieldarezzo/desafiosInternos/tree/master/ajax#5---acompanhar-oq-foi-enviado

Edit2:

Curiosidade a parte.

Pegue o texto que você mandou abaixo:

"[{nome:'William ******* Martins'},{nome:'Marcela ******* Martins'},{nome:'Arthur ******* Martins'},{nome:'teste04'},{nome:'teste05'},{nome:'teste06'},{nome:'teste07'},{nome:'teste08'},{nome:'teste09'},{nome:'teste10'},{nome:'teste11'},{nome:'teste12'},{nome:'teste13'},{nome:'teste14'},{nome:'teste15'}]"

Mantendo as aspas duplas

E passe no site:

http://jsonviewer.stack.hu/

O JavaScript assim como o C.

Entende uma (String) como um conjunto chars.

var myString = 'abc';

alert(myString[0]); //a
alert(myString[1]); //b
alert(myString[3]); //c

//Ps Prefira o uso do metodo charAt() para compatibilidade 

Ou seja o seu JSON foi entendido como uma String.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.