Ir para conteúdo

POWERED BY:

Arquivado

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

Rai Siqueira

Erro ao retornar dados JSON

Recommended Posts

fala galera, estou tentando retornar alguns dados de um json criado pelo PHP. Porém quando tento executar o código a baixo, retorna um erro no meu console

 

Código:

$.ajax({
	url: '/admin/painel/listar',
	datatype: 'json',
	success: function(data){
		$.each(data, function(key, value){
			console.log(data[key].post_titulo);
		});
	}
})

Erro:

 

Uncaught TypeError: Cannot use 'in' operator to search for '353' in [{"id":5,"post_titulo":"Teste put com slim frame","post_texto":"testando o put com slim framework"},{"id":6,"post_titulo":"Mais um teste com POST","post_texto":"mais um texto com post no Slim "},{"id":7,"post_titulo":"teste cadastro slim","post_texto":"teste cadastro slim framework"},{"id":8,"post_titulo":"Titulo 10","post_texto":"texto do titulo 10"}]

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para debugarmos, execute assim:

 

success: function(data){
    console.log(data, typeof data)

    $.each(data, function(key, value){
        console.log(key)
    });
e poste o resultado q for mostrado no console.

Se eu entendi, o erro vem do core do jQuery.

 

E você tá usando o each() de forma incorreta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seu php não está devolvendo com cabeçalho de JSON ? o typeof é String ?

Corrija.

 

Fora isso, se quiser ajuda mostre o que apareceu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse é minha trait que transforma os dados retornados para JSON:

<?php
namespace app\traits;

trait mysql{

	private $dataArray = array();

	public function tableModel()
	{
		\ActiveRecord\Model::$table_name = $this->table; //pega o nome da tabela através do model POST.php
	}

	public function listar()
	{
		return \ActiveRecord\Model::find('all'); //listar todos
	}

	public function deletar($id)
	{
		$deletar = \ActiveRecord\Model::find($id); //listar o id desejado
		$deletar->delete();
	}

	public function cadastrar($dados)
	{
		\ActiveRecord\Model::create($dados);
	}

	public function pegarPeloId($id)
	{
		return \ActiveRecord\Model::find($id);
	}

	public function atualizar($id, $attributes)
	{
		$atualizar = \ActiveRecord\Model::find($id);
		$atualizar->update_attributes($attributes);
	}

	public function toJson($returnedData)
	{
		foreach($returnedData as $data):
			array_push($this->dataArray, $data->to_array());
		endforeach;
		return json_encode($this->dataArray);
	}
}

minha rota para retornar os dados:

$app->get('/admin/painel/listar', function() use($app){
	$posts = new \app\models\Posts();
	$postsEncontrados = $posts->listar();
	echo $posts->toJson($postsEncontrados);
});

quando jogo um echo "teste", e no meu JS der um console.log(data), funciona de boa. a bronca está ocorrendo na leitura desses dados para transformar no json...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pq vc não tá devolvendo um json. Envie o cabeçalho:

header('Content-Type: application/json');

E mude a tua forma de usar o $.each(), q como eu disse não está "do melhor jeito".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tá ai, tinha esquecido de dar o response do Slim Framework... valeu Bruno! abraços

$app->get('/admin/painel/listar', function() use($app){
	$app->response->headers->set('Content-Type', 'application/json');
	$posts = new \app\models\Posts();
	$postsEncontrados = $posts->listar();
	echo $posts->toJson($postsEncontrados);
});

vou dar um corrigida no $.each. Valeu pela dica!

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.