Jump to content
halfar

json - problemas com dataType e success: function(retorno)

Recommended Posts

Ao executar o codigo tem dado alguns problemas.

 

Primeiro: o DataType gera erro logo de início. Se eu troco por html, funciona melhor, todavia existe um outro erro:

function(retorno), esta funcao retorna valores nulos..

 

Abaixo o codigo php:


 

Citar

 

<?php

include("../conexao/conexao.php");

//header("Content-Type:" . "text/plain");
header("Content-Type: application/json");

 

 

$sql = "select titulo, texto, autoria from mysql";

echo $sql;

$exec = $conn->query($sql);

$rows = $exec->fetchAll( PDO::FETCH_ASSOC );

$dados = $rows;


   die(json_encode($dados, JSON_PRETTY_PRINT));


?>

 

 

 

o script:


 

Citar

 

function carregarItens(){

var itens = "", url = "busca.php";


$.ajax({

url: url,
//cache: false,
dataType: "json",
beforeSend: function(){

$("h2").html("carregando...");

 

},


error: function(){


$("h2").html("erro");

},

success: function(retorno){


if (retorno[0].erro){

$("h2").html(retorno[0].erro);


}else{

 

 

// aqui obviamente vai dar problema, pois se a funcao retorno está retornando nulos, entao nada ira funcionar aqui.

for(var i = 0; i<=retorno.lenght; i++){

itens = "<tr>";

//itens = "<td>" + retorno.data + "</td>";
itens = "<td>" + retorno.titulo + "</td>";
itens = "<td>" + retorno.texto + "</td>";
itens = "<td>" + retorno.autoria + "</td>";
itens = itens + "</tr>";
alert(itens);
  
}
$("#tabela tbody").html(itens);


}

}

});
 

}


 

 

 

Share this post


Link to post
Share on other sites

encontrei uma função aqui mesmo neste fórum, que é a seguinte:

Citar


function json(){
    var qtd;
    var retorno;

    // Resgatar valores.
    json.prototype.resgatarValores = function(){
        $('#resultado').html('Carregando dados...');

        // Estrutura de resultado.
        $.getJSON('arquivo.json', function(data){
            this.qtd = data.usuarios.length;
            this.retorno = '';

            for (i = 0; i < this.qtd; i++){
                this.retorno += 'ID: ' + data.usuarios.id + '<br />';
                this.retorno += 'Nome: ' + data.usuarios.nome + ' - ';
                this.retorno += 'Cidade: ' + data.usuarios.cidade + '<br /><br />';
            }

            $('#resultado').html(this.retorno);
        });

    }

}

// Objeto.
var obj = new json();
obj.resgatarValores();

 

 

 

eu gostaria de trocar este codigo pelo o que consta na minha função carregarItens()

 

Eu tentei fazer isto, mas não deu certo,  mas tambem não entendo praticamente nada do json...

 

Aproveitando o ensejo, na linha de código abaixo:

"$.getJSON('arquivo.json', function(data){"

onde consta arquivo.json, eu trocaria pelo meu arquivo php?  que no caso seria consulta.php

 

Share this post


Link to post
Share on other sites
Citar

onde consta arquivo.json, eu trocaria pelo meu arquivo php?  que no caso seria consulta.php

 

Sim deveria funcionar.


De qualquer forma você precisa encontrar o seu problema....

 

Exemplo da foto abaixo acompanhando o que foi enviado via POST para a pagina 'recebe.php' utilizando o Chrome/(F12->Aba Network -> requisição X)

Fluxo de Debbug

 

Depois não custa nada verificar oq recebeu na função do ajax/callback... Ex:

$.ajax({
	url: url,
	dataType: "json",
	beforeSend: function(){
		$("h2").html("carregando...");
	},
	error: function(){
		$("h2").html("erro");
	},
	success: function(retorno){
		console.log('Retorno ->', retorno);
	
	}
	....
	...
	
	

Abre o console... veja oq retorna, ta vindo um JSON bonitinho?dentro desse JSON tem uma variavel 'error' como você espera? 

 

 

Recomendo a leitura.

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

 

Citar

-- As vezes o problema é na requisição...
-- As vezes o problema é na resposta (back-end)
-- As vezes você nem sabe onde ca***os problema está....

Recomendo a leitura completa:

https://github.com/gabrieldarezzo/desafiosInternos/tree/master/ajax

 

 

Outra coisa a se atentar é que se você está enviando um JSON, ele obrigatoriamente precisa ser padrão UTF-8, caso contrario ele simplesmente traz um branco....

 

Caso esteja como latin/ISO-8859-1/Western a conversão da base é necessária.

Exemplo de um 'cast' in run time:

<?php
include("../conexao/conexao.php");
//header("Content-Type:" . "text/plain");
header("Content-Type: application/json");
 
 
$sql = "select titulo, texto, autoria from mysql";
echo $sql;
$exec = $conn->query($sql);
$exec->exec("set names utf8"); //Garante UTF em versão < 5.3

$rows = $exec->fetchAll( PDO::FETCH_ASSOC );
$dados = $rows;

@Dica: PDO com o nome exec ficou meio (INCEPTION)

 

Outra coisa que achei confusa foi você cadastrar 'registros' na tabela 'mysql'.

 

Tente criar uma tabela própria, evitando nomes 'especiais'.

Exemplo.. no seu acredito que uma tabela chamada 'blog', 'postagem', 'post' encaixaria melhor ;)

 

 

 

Share this post


Link to post
Share on other sites

oi,,

bem, eu já havia visto esta tela do f12 no chrome, havia um erro que apontava, erro 404 servidor não responde, mas depois sumiu este erro. De resto desta tela toda, não entendi bolufas para que serve tudo aquilo. Andei clicando aqui e ali e acabei descobrindo uma forma de debugar, mas não ajudou em nada. Tentei debugar novamente depois, mas não achei mais onde foi que cliquei. 

 

Tenho uma dúvida, na função que está dando erro, não tem que fazer uma chamada a alguma função do  jquery ou json??  Quando aprendi ajax tem uma função que é executada para chamar o ajax, neste json não tem que ter algo parecido, ou esta linha de código $.ajax({   existente na função já faz isto??

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By israel@iproduce.com.br
      Olá,
      Boa noite!
      Tenho algumas vagas para motion (basicamente banner de internet animado e vinhetas para redes sociais) para a cidade do Rio de Janeiro. As vagas são temporárias (6 meses), podendo ocorrer a efetivação nesse período. É necessário estar alocado no escritório no Rio.
      Conhecimento avançado em: Adobe Animate CC, Google Web Designer, After Effects.
      Além destes programas é um diferencial conhecer a linguagens: HTML5, CSS3 e Javascript.
      Tem interesse ou conhece alguém que esteja precisando? Então manda o seu portifólio e CV para no e-mail: freela@iproduce.com.br
      Boa sorte!
    • By Vinicius Bazan
      Sou leigo ainda no Java Script e não manjo de muita coisa ainda, eu preciso fazer uma função que que deve ser executada na pagina HTML, eu crio a função dentro da tag <script> na <head> do html, mas como eu chamo essa função no momento que eu precisar no <body>, o que eu devo digitar pro código saber que ali deve executar a função?
    • By PRWEB
      Boa tarde!!!
       
      Por favor como faço para marcar um checkbox e ai marca automaticamente um campo radio?
       
      Obrigado
    • By Randys
      Eu selecionei um elemento e adicionei a classe ativo nele, agora não estou conseguindo remover a classe quando eu seleciono outro elemento
      const article = document.getElementById(id); article.classList.add('ativo'); Eu preciso remover a classe ativo quando eu clicar em outro elemento article, como faço isso?
    • By Articulando
      Galera, seguinte. Estou tentando criar um evento em javascript que funciona da seguinte maneira; existem 5 checkbox na tela, ao selecionar dois checkbox os outros irão travar e não permitir o clique, se o usuário clicar novamente retirando a seleção de algum dos que foi selecionado ele volta a habilitar. Até então o código funciona blz, porém agora eu preciso fazer com que os dois primeiros checkbox contém como um único clique, ou seja, são 2 checkbox para travar, porém se eu selecionar o primeiro e o segundo eles contam como um, então eu o usuário poderia realizar outro clique em algum checkbox e ficariam 3 checkbox selecionados, porém isso só se aplica aos dois primeiros checkbox, caso não sejam eles é apenas dois cliques, se eles forem clicados o usuário pode escolher mais uma opção.
       
      o código atual está assim:
       
      <script type="text/javascript">
                  (function(){
                      "use strict";
                      var marcados = 0;
                      var verifyCheckeds = function($checks) {
                          if( marcados>=2 ) {
                              loop($checks, function($element) {
                                  $element.disabled = $element.checked ? '' : 'disabled';
                              });
                          } else {
                              loop($checks, function($element) {
                                  $element.disabled = '';
                              });
                          }
                      };
                      var loop = function($elements, cb) {
                          var max = $elements.length;
                          while(max--) {
                              cb($elements[max]);
                          }
                      }
                      var count = function($element) {
                          return $element.checked ? marcados + 1 : marcados - 1;
                      }
                      window.onload = function(){
                          var $checks = document.querySelectorAll('input[type="checkbox"][name="modalidades[]"]');
                          loop($checks, function($element) {
                              $element.onclick = function(){
                                  marcados = count(this);
                                  verifyCheckeds($checks);
                              }
                              if($element.checked) marcados = marcados + 1;
                          });
                          verifyCheckeds($checks);
                      }
                  }());
              </script>
       
       
      Quem conseguir me ajudar eu agradeço, preciso muito desse código rodando. 
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.