Ir para conteúdo

Arquivado

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

Periotto

Php com retorno em Json

Recommended Posts

Olá pessoal sou novo com PHP e preciso de uma ajuda.

Tenho um sistema onde realizo uma busca por like e a retorno com json. Porém ela nao retorna nada nem mesmo um erro. Desde já agradeço

 

Seguem os códigos

 

Script da pagina de busca

<script type="text/javascript">
function pesquisa(){
var nome=  $('#nome').val();
console.log("entrou \n"+nome);
   $.ajax({
       url: "../Dao/UserDao.php?acao=pesq?nome="+nome,
       dataType: "json",
       success: function(json){
        console.log("Teste");
        var teste = $.parseJSON(json);
       var j = json_decode(teste);
       var msg="";
       $.each(j, function(i, item) {
        msg = "Nome: " + j[i].nome + "\n";
  msg += "ID: " + j[i].id + "\n";
  msg += "Login: " + j[i].login;
 
  i++;
       });
       console.log(msg);              
    }
});  
}
</script>

Pagina PHP

public function pesquisa() {
        /*ini_set( 'display_errors', 0 );*/
        try {     
       $nome = $_GET['nome'];
       echo "<script> alert('$nome');</script>";
       $query = "SELECT * FROM user where nome like'$nome%'";        
       $consulta = mysql_query($query);        
       if(mysql_num_rows($consulta) > 0){  
        $retorno = array();
        $i = 0;
       while($dados = mysql_fetch_array($consulta)){
       
        $retorno[$i]["id"] = $dados["id"];
        $retorno[$i]["nome"] = $dados["nome"];
        $retorno[$i]["login"] = $dados["login"];
        $retorno[$i]["dataCad"] = $dados["dataCad"];
        $retorno[$i]["status"] = $dados["status"];
       
        $i++;
       }
       $teste= json_encode($rotorno);
       echo "<script> console.log($teste);</script>";
       echo $teste;
       }else{
        echo "Nenhum valor encontardo";
       }  
       return $retorno;     
        } catch (PDOException $ex) {
                echo "Erro: " . $ex->getMessage();
            }
        }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando você executa a função pesquisa( ) do JavaScript? E a função pesquisa( ) do PHP? São coisas diferentes...

 

Na página que retorna os dados em JSON, você precisa fazer assim:

 

header("Content-Type: application/json; charset=utf-8");
 
$return = array();
 
[ aqui você monta o array que armazenará os dados que serão retornados ]
 
echo json_encode($return);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta assim:

 

<script type="text/javascript">
function pesquisa() {
var nome = $('#nome').val();
console.log("entrou \n" + nome);
$.ajax({
url: "../Dao/UserDao.php?acao=pesq&nome=" + nome,
dataType: "json"
}).done(function(json) {
var msg = "";
$.each(json, function(i, item) {
msg = "Nome: " + item.nome + "\n";
msg += "ID: " + item.id + "\n";
msg += "Login: " + item.login;
console.log(msg);
});
});
}
pesquisa()
</script>

 

 

<?
use \PDO as PDO;
class Busca{
public function pesquisa(){
$nome = '%'.$_REQUEST['nome'].'%';
$conexao = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8', 'username', 'password');
$query = $conexao->prepare('SELECT id, nome, login, dataCad, status FROM user WHERE nome LIKE :nome');
$query->bindValue('nome', $nome, PDO::PARAM_STR);
$query->execute();
$return = array();
while($row = $query->fetch(PDO::FETCH_ASSOC)){
$return[] = array(
'id'=>$row['id'],
'nome'=>$row['nome'],
'login'=>$row['login'],
'dataCad'=>$row['dataCad'],
'status'=>$row['status']
);
}
return $return;
}
}
//seta o tipo de retorno
header('Content-Type: application/json', true);
//Cria a busca
$busca = new Busca();
//Consulta dados
$array = $busca->pesquisa();
//converte em string
echo json_decode($array);

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Quando você executa a função pesquisa( ) do JavaScript? E a função pesquisa( ) do PHP? São coisas diferentes...

 

Na página que retorna os dados em JSON, você precisa fazer assim:

 

header("Content-Type: application/json; charset=utf-8");
 
$return = array();
 
[ aqui você monta o array que armazenará os dados que serão retornados ]
 
echo json_encode($return);

 

 

A função pesquisa( ) do JavaScript é chamada por um onclick na minha pagina de busca.

Já dou um encode() nos dados dentro da pagina php

 

o problema é q nao consigo tratar o retorno com json_decode()

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

se você usar o "done"do ajax ele já te retorna um json

 

<script type="text/javascript">
		function pesquisa() {
			var nome = $('#nome').val();
			
			$.ajax({
				url: "../Dao/UserDao.php?acao=pesq&nome=" + nome,
				dataType: "json",
			}).done(function(json) {
				$.each(json, function(i, item) {
					msg = "Nome: " + item.nome + "\n";
					msg += "ID: " + item.id + "\n";
					msg += "Login: " + item.login;
					
					console.log(msg);
				});
			});
		}
</script>

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Tenta assim:

 

<script type="text/javascript">
function pesquisa() {
var nome = $('#nome').val();
console.log("entrou \n" + nome);
$.ajax({
url: "../Dao/UserDao.php?acao=pesq&nome=" + nome,
dataType: "json"
}).done(function(json) {
var msg = "";
$.each(json, function(i, item) {
msg = "Nome: " + item.nome + "\n";
msg += "ID: " + item.id + "\n";
msg += "Login: " + item.login;
console.log(msg);
});
});
}
pesquisa()
</script>

 

 

<?
use \PDO as PDO;
class Busca{
public function pesquisa(){
$nome = '%'.$_REQUEST['nome'].'%';
$conexao = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8', 'username', 'password');
$query = $conexao->prepare('SELECT id, nome, login, dataCad, status FROM user WHERE nome LIKE :nome');
$query->bindValue('nome', $nome, PDO::PARAM_STR);
$query->execute();
$return = array();
while($row = $query->fetch(PDO::FETCH_ASSOC)){
$return[] = array(
'id'=>$row['id'],
'nome'=>$row['nome'],
'login'=>$row['login'],
'dataCad'=>$row['dataCad'],
'status'=>$row['status']
);
}
return $return;
}
}
//seta o tipo de retorno
header('Content-Type: application/json', true);
//Cria a busca
$busca = new Busca();
//Consulta dados
$array = $busca->pesquisa();
//converte em string
echo json_decode($array);

 

 

se você usar o "done"do ajax ele já te retorna um json

 

<script type="text/javascript">
		function pesquisa() {
			var nome = $('#nome').val();
			
			$.ajax({
				url: "../Dao/UserDao.php?acao=pesq&nome=" + nome,
				dataType: "json",
			}).done(function(json) {
				$.each(json, function(i, item) {
					msg = "Nome: " + item.nome + "\n";
					msg += "ID: " + item.id + "\n";
					msg += "Login: " + item.login;
					
					console.log(msg);
				});
			});
		}
</script>

cara troquei todo o meu codigo pra fazer um teste e tbm nao deu certo. Mas agradeço pela ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça do jeito que sugeri, alterando a página da consulta para retornar um JSON setando um header, e ao invés de usar $.ajax, use $.post, eu faço assim direto e não tenho problema nenhum...

 

$.post('../Dao/UserDao.php', { acao: 'pesq', nome: nome }, function(data) {
    console.info(data);
});

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta assim

 

ele tem um "error" se der algum erro no servidor ele joga no console do navegador

<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js"></script>

<script type="text/javascript">
  function pesquisa() {
    var val_nome = $('#nome').val();

    $.ajax({
    	type: 'GET',
        url: "../Dao/UserDao.php",
        dataType: "json",
        data: {acao: "pesq", nome: val_nome}//Parametros
    }).done(function(json) {
        $.each(json, function(i, item) {
            console.log("Nome: " + item.nome + " - ID: " + item.id + "  - Login: " + item.login);
        });
    }).error(function(erro){
    	//Se der um erro no servidor ele joga no console
    	console.error(erro.responseText)
    });
}
 
pesquisa() 
</script>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Calmaê! Qual o sentido disto? Usar um try/catch com retorno de uma exception do PDO sendo que você está usando MySQL::mysql_query? Você tem que usar MySQL::mysql_error ou deixar de usar funções do MySQL e migrar de vez para o PDO.

 

Para iniciar no PDO:

:seta: PHP Data Objects

:seta: Desenvolvendo com PDO PHP Data Objects | iMasters

 

Voltando ao seu problema:

Quando você executa a página de pesquisa, sem ser por AJAX, a página mesmo, no navegador, o que aparece? Aparece os resultados da pesquisa corretamente?

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.