Ir para conteúdo

POWERED BY:

Arquivado

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

CrazyLOL

Retorno JSON - PHP

Recommended Posts

Fiquei em dúvida em qual area postar, porém como estou com duvida no jquery, acredito que é aqui é o local ideal correto?
Bem, estou fazendo uma requisição em um arquivo php e estou fazendo o retorno dele via json, ok até ai, problema está sendo hora que vou exibir esse resultado.

 

Para entender melhor, arquivo js:

$("#formCategoria").submit(function(e) {
      	
		e.preventDefault();
			var dados = $("#formCategoria").serialize();
			
			$.post(
			 'processos/processoCategorias.php',
			 {
				 acao : 2,
				 data:dados
			 },
			 function(data){
				alert(2);
			 	toastr.error(data.erro);	
			 });
		  
      });

arquivo PHP:

<?php
include_once '../_inc/config.inc.php';
include_once '../_classes/CategoriasDAO.php';
include_once '../_classes/Funcoes.php';

$Categorias = new CategoriasDAO();
$Funcoes = new Funcoes();

$acao = (int)$_POST['acao'];

switch($acao){
	//buscar 
	case 1:
				
	break;
	
	//adicionar 
	case 2:
		
		//variaveis
		$dados_form = $_POST['data'];
		$dados_php	= array();
		
		//variavel para retorno jquery e php
		$json = array("sucesso" => "","erro" => "");
		
		//arrays para controle 
		$campos  = array();
		$valores = array();
		
		//converterndo para array os dados do Form
		parse_str($dados_form,$dados_php);
		
		//variavel para controle de erro
		$erro = '';
		
		//adicionado separadamente os valores 
		foreach ($dados_php as $key => $value){
			//array_push($campos,$key); #adiciono o campo exemplo "Nome"
			//array_push($valores,$value); #adiciono o valor exemplo "Nome teste";
			
			//verifico se os campos foram preenchidos.
			$erro .= $key == 'm_departamento' && empty($value) ? 'É necessário informar o departamento desda Categoria<br>' : NULL;
			$erro .= $key == 'm_descricao' && empty($value) ? 'É necessário informar o nome desta categoria<br>' : NULL;
		}
		
		//se a variavel erro estiver vazia executa as funcoes;
		if(empty($erro)){
			
		}else{
			//retornando erro json
			$json['erro'] = $erro;
			$a = json_encode($json);
			echo ($a);		
		}
		
		
		
	break;
}
?>

usando no jquery ( data.erro) ele me retorna vazio.

O que eu fiz de errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim, ele retorna vazio porque a resposta que vem la do php não é json, é uma string em formato JSON. você pode transformar essa string em json, com o JSON.parse, veja

$("#formCategoria").submit(function(e) {
    
        e.preventDefault();
            var dados = $("#formCategoria").serialize();
            
            $.post(
             'processos/processoCategorias.php',
             {
                 acao : 2,
                 data:dados
             },
             function(data){
                alert(2);
                 data = JSON.parse(data);//pronto, agora a data deixa de ser uma string(obs: se a string estiver em formato errado, o JSON.parse vai dar um throw em uma exception)
                 toastr.error(data.erro);    
             });
         
});

como eu vi que você usa jquery, o pessoal la do jquery ja pensou nisso e permite que você defina o que você esta retornando, assim os dados ja vem no callback no tipo json. exemplo

$("#formCategoria").submit(function(e) {
    
        e.preventDefault();
            var dados = $("#formCategoria").serialize();
            
            $.post(
             'processos/processoCategorias.php',
             {
                 acao : 2,
                 data:dados
             },
             function(data){
                alert(2);
                 toastr.error(data.erro);    
             },'json');// o quarto parametro do post é o tipo de dados, dai a data ali em cima ja vem json, porque assim definimos
         
});

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não deu certo.

Coloquei o retorno data.erro no alert() mas não apareceu nada.

 

o meu retorno está vindo assim:

{"sucesso":"","erro":"\u00c9 necess\u00e1rio informar o departamento desda Categoria<br>\u00c9 necess\u00e1rio informar o nome desta categoria<br>"}

Tentei usar o primeiro exemplo e apareceu está mensagem:

SyntaxError: JSON.parse: unexpected character
	

obj = JSON.parse(data);

Já o segundo exemplo, não aparece nenhum erro no console, porém também não exibi nada nem o alert() aparece...

Compartilhar este post


Link para o post
Compartilhar em outros sites

[...] a resposta que vem la do php não é json, é uma string em formato JSON [...]

 

Hãn? :upset:

 

Tente colocar o dataType como JSON em sua requisição, o que vier do PHP (renderizado com o json_encode()) já será um objeto, não sendo necessária a função JSON.parse().

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz o teste novamente mudei a requisição jquery assim:

$.ajax({
				  type: "POST",
				  url: 'processos/processoCategorias.php',
				  data: {acao : 2, data:dados },
				  success: function(data){
						alert(data.erro);
						toastr.error(data);	
					 },
				  dataType: 'json'
				});

Não deu erro mas também o alert() não executa.

:S

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual a versão do jQuery você está usando?

 

  • jqXHR.done(function( data, textStatus, jqXHR ) {});

    An alternative construct to the success callback option, the .done() method replaces the deprecated jqXHR.success() method. Refer to deferred.done() for implementation details.

  • jqXHR.fail(function( jqXHR, textStatus, errorThrown ) {});

    An alternative construct to the error callback option, the .fail() method replaces the deprecated .error() method. Refer to deferred.fail() for implementation details.

  • jqXHR.always(function( data|jqXHR, textStatus, jqXHR|errorThrown ) { });

    An alternative construct to the complete callback option, the .always() method replaces the deprecated .complete()method.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mesmo assim não funcionou, mudei para done.

Não mostra nenhum erro no Firebug, mostra que executou com sucesso, mas o alert() não executa.

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.