Ir para conteúdo
Cesar Melo

Retorno de função com JSON

Recommended Posts

Olá, gostaria de uma ajuda para retornar um resultado de uma função. Dentro dessa função, eu faço uma requisição através do $.getJSON(), e gostaria que função retornasse o resultado que obtido na requisição JSON.

Ex:

function pedidoGet() {
	var pedido;
	$.getJSON(
		"getters.php",
		{param1: "pedidoId"},
		function (data) {
			pedido= data[0];
			console.log(pedido) 
			//aqui, ainda dentro da requisição, a variavel "pedido" tem o valores que foi 
			//retornado pela requisição getJSON
		}
	);
	console.log(pedido) //aqui, não retorna nada
	return pedido; //aqui, essa variavel pedido não tem mais os valores que a requisição getJSON retornou.
}

var pedidoTeste= pedidoGet();
//depois que chamar a funçõa, gostaria de ter os valores para usar como for melhor pra mim.
console.log(pedidoTeste.id); 
console.log(pedidoTeste.valor);

Conseguiram entender minha necessidade?

 

Desde já, agradeço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você já testou se o PHP devolve o que você pede pelo GET?

É preciso ter certeza que tipo de dados o PHP lhe devolve e então manipulá-lo conforme sua necessidade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa Angelo. Sim, o PHP devolve sim o que peço pelo GET, tanto que dentro da chamada getJSON, quando eu escrevo lá "console.log(pedido)", ele mostra o resultado que eu quero.

Porem, isso só funciona dentro da "function" que está dentro do getJSON.

Eu gostaria de ter essas informações fora dessa função, para que eu possa colocar os valores que eu preciso em div's separadas sem ter que ficar chamado a função getJSON toda hora.

Minha intensão é chamar a função apenas uma vez, e ter um "array" ou um "objeto" com os valores de resposta da requisição.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exemplos com fetch, axios e $.getJSON aqui.

 

Uma opção melhor ainda com uma ótima abstração baseada no fetch - Ky

 

Outra alternativa seria você colocar uma variável fora do escopo da função.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 18/09/2018 at 08:36, angelorubin disse:

Exemplos com fetch, axios e $.getJSON aqui.

 

Uma opção melhor ainda com uma ótima abstração baseada no fetch - Ky

 

Outra alternativa seria você colocar uma variável fora do escopo da função.

 

Angelo, pesquisei um pouco e consegui chegar ao resultado que eu queria.

Eu encontrei um exemplo que achei que resolveria, mas não funcionou no meu caso.. mas tenho que fazer outros teste..

Veja só:

var pedido=null;
$.getJSON(
   "getters.php",
   {param1: "pedidoId"},
   function(data){
      pedido= data;
   }
);

//porem isso não funcionou
console.log(pedido.id); //imprime null
console.log(pedodo.valor); //imprime null

 

Abaixo segue o exemplo que funcionou:

var pedido= funcPedido();
function funcPedido(){
  var saida=null;
  $.ajax({
    async: false,
    dataType: "json",
    url: "getter.php",
    data: {param1: "pedidoId"},
    success: function(data) {
      saida= data;
    }
  });
  return saida;
}

console.log(pedido.id); //isso funcionou
console.log(pedido.valor); //isso funcionou \o/

Muito obrigado pela ajuda Angelo!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, é verdade, comentou sim sobre a variável fora da função.. porem isso não funcionou com o $.getJSON()..
Só funcionou com $.ajax().

Uma outra coisa que não entendi foi:

var pedido= funcPedido();
function funcPedido(){
   //procedimentos...
}

A variável receber uma função vazia, e depois a função ser criada..

Tentei criar a função, e depois declarar a variável recebendo a função. Isso não funcionou. Vou pesquisar sobre isso para ter um melhor entendimento.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por reginaldo123
      estou com dificuldade em criar uma url pernalizada exemplo
       
      href="www.bolacha,.com/novabolacha"
      value= "www.bolacha.com"
       
      quando o usuario copia a url para colocar em outra pagina quero que apareça o conteudo de value, e seja direcionado para o href.
       
    • Por Diego Carlos
      Fiz um laço .each que retorna alguns button:   $(document).ready(function(){ listarPedidos() var consultas = setInterval(listarPedidos, 4000); }); function listarPedidos(){ $.getJSON('conectar/_pedidos/listaPedidos.php', function (data) { $.each(data, function(i, valor){ elementoFILA += "<tr id='statusFILA'>"; elementoFILA += "<td>" + valor.PED_ID + "</td>"; elementoFILA += "<td>" + valor.PED_DATA_N + "</td>"; elementoFILA += "<td>" + resultado + " / " + valor.CLI_TEL + "</td>"; elementoFILA += "<button class='btn btn-info' id='btnVisu' title='Visualizar Pedido'><i class='fas fa-eye'></i> </button>"; elementoFILA += "<button class='btn btn-primary' title='Editar Pedido'><i class='fa fa-pencil-alt'></i> </button>"; elementoFILA += "<button class='btn btn-dark' disabled='' title='Setar Saiu Entrega'><i class='fa fa-motorcycle'></i> </button>"; elementoFILA += "<button class='btn btn-dark' id='btnFinalizar' disabled='' title='Finalizar Pedido'><i class='fa fa-check'></i> </button>"; elementoFILA += '</td>' elementoFILA += "</tr>"; } Minha dificuldade é pegar linha id='btnVisu'.
      Estou tentando fazer dessa forma, mas não da certo:
      $('#btnVisu').click(function () { alert("clicou"); });  
       
      já fiz com class também mas não deu, engraçado que dessa forma deveria pelo menos pegar o primeiro da lista e não pega
       
      dês de já agradeço
       
       
    • Por JGD
      Supondo que tenho um input name = dataHoraINI...
      Este input tem o  valor/value =  21/03/2019 09:00 
      Chamo a função abaixo pelo <button...:
       
      <button class="btn btn-primary" onclick="popdataJGD('dataHoraINI','pop1',document.getElementById('dataHoraINI').value)"> <i class="glyphicon glyphicon-calendar"></i> </button>  
      São 03 parâmetros: popdataJGD(objeto, div, value).. Sendo o 3º: data + hora.
       
      Observar que passo para a função o 3º parâmentro assim: document.getElementById('dataHoraINI').value
      Como poderia passar este 3º paramentro como string e inline a data e hora ???
       
      Qual diferença entre: 
      document.getElementById('dataHoraINI').value E
      this.value E/Ou ainda.
      var data_hora = "21/03/2019 09:00" Neste caso : popdataJGD(objeto, div, data_hora)... Observar no code acima a questão das aspas simples.
       
      Agradeço qualquer ajuda conceitual
       
    • Por ZeroCood
      Senhores bom dia, preciso pegar um retorno de uma api da procob ele retorna um json, nao estou conseguindo pegar o retorno, alguem pode me ajudar, veja o codigo: 
      { "code": "000", "message": "Consulta de testes com dados fictícios", "date": "2019-03-19", "hour": "10:07:41", "content": { "nome": { "existe_informacao": "SIM", "conteudo": { "documento": "99999999999", "tipo_documento": "PF", "nome": "JOÃO DA SILVA", "outras_grafias": [ "JOÃO D SILVA", "JOÃO SILVA" ], "data_nascimento": "15/06/1979", "outras_datas_nascimento": [ "25/06/1979" ], "idade": "26", "signo": "Gêmeos", "obito": "NAO", "sexo": "M", "uf": "RS,CE,", "situacao_receita": "REGULAR", "situacao_receita_data": "2016-10-17", "situacao_receita_hora": "11:02:49", "estrangeiro": { "existe_informacao": "SIM", "estrangeiro": "NAO", "pais_origem": { "codigo": "10", "origem": "Brasileiro" } } } }, "dados_parentes": { "existe_informacao": "SIM", "conteudo": [ { "documento": "88888888888", "nome": "MARIA DA SILVA", "campo": "mae", "obito": "NAO", "tipo_beneficio": "", "aposentado": "NAO" } ] }, "pessoas_contato": { "existe_informacao": "SIM", "conteudo": [ { "documento": "77777777777", "nome": "LUIZ SOUZA", "endereco": "SAO CLEMENTE", "bairro": "CENTRO", "cep": "44642000", "cidade": "VARJOTA", "uf": "CE" } ] }, "pesquisa_enderecos": { "existe_informacao": "SIM", "conteudo": [ { "logradouro": "RUA", "endereco": "SAO CLEMENTE", "bairro": "CENTRO", "cidade": "VARJOTA", "numero": "13", "cep": "44642000", "bloco": "", "apto": "", "casa": "", "quadra": "", "lote": "", "complemento": "", "uf": "CE" } ] }, "trabalha_trabalhou": { "existe_informacao": "SIM", "conteudo": [ { "documento": "92787126000176", "nome": "PADARIA PETER PÃO", "logradouro": "RUA", "endereco": "INÁCIO DA SILVA", "bairro": "CENTRO", "cidade": "CURITIBA", "numero": "999", "cep": "87878787", "bloco": "", "apartamento": "", "casa": "", "quadra": "", "lote": "", "complemento": "", "uf": "PR", "telefones": [ { "ddd": "99", "telefone": "99999999", "tipo": "fixo" } ] } ] }, "contato_preferencial": { "existe_informacao": "SIM", "conteudo": { "telefone_fixo": { "ddd": "99", "telefone": "99999999" }, "telefone_celular": { "ddd": "99", "telefone": "99999999" }, "telefone_outros": { "ddd": "41", "telefone": "33333333" }, "parentes": { "documento": "99999999999", "nome": "MATHEUS ALENCAR", "tipo": "pai" }, "contatos": { "documento": "99999999999", "nome": "MARIA ROBERTA PEREIRA" }, "empregador": { "documento": "99999999999", "nome": "JOAO NASCIMENTO SANTOS" }, "email": "email@email.com", "endereco": { "endereco": "FRANCISCO JOSE", "numero": "42", "cidade": "Curitiba", "estado": "PR", "cep": "99999999" } } }, "residentes_mesmo_domicilio": { "existe_informacao": "SIM", "conteudo": [ { "nome": "CARLA TEIXEIRA", "documento": "99999999999" }, { "nome": "LUIZ PEREIRA", "documento": "99999999999" } ] }, "emails": { "existe_informacao": "SIM", "conteudo": [ { "email": "joao@email.com", "pontuacao": "0" }, { "email": "joao.fernando@email2.com", "pontuacao": "0" } ] }, "numero_beneficio": { "existe_informacao": "SIM", "conteudo": { "numero": "999999999", "ano_aposentadoria": "7", "tipo_aposentadoria": "Aposentadoria Por Tempo De Contribuição", "aposentado": "SIM", "inss": "SIM", "acidente_trabalho": "SIM", "afastado_doenca": "SIM", "emprestimo": "SIM", "banco_nome": "Itaú Unibanco S.A.", "banco_agencia": "DUQUE DE CAXIAS/JARDIM PRIMAVERA", "banco_endereco": "ROD. WASHINGTON LUIZ, S/Nº", "banco_numero": "0", "banco_complemento": "QUADRA 3 - LOTE 5", "banco_bairro": "PARQUE SANTA LÚCIA", "banco_c_e_p": "99999999", "banco_cidade": "DUQUE DE CAXIAS", "banco_estado": "RJ" } }, "alerta_participacoes": { "existe_informacao": "SIM", "conteudo": { "existe": "SIM", "quantidade": 3 } }, "pesquisa_telefones": { "existe_informacao": "SIM", "conteudo": { "fixo": [ { "ddd": "51", "telefone": "11111111", "operadora": "Embratel - Fixo", "pontuacao": "0" } ], "celular": [ { "ddd": "41", "telefone": "22222222", "operadora": "TIM - Celular", "pontuacao": "0" } ], "outros": [ { "ddd": "41", "telefone": "33333333", "operadora": "OI - Fixo", "pontuacao": "0" } ], "comercial": [ { "ddd": "51", "telefone": "66666666", "operadora": "Embratel - Fixo", "pontuacao": "0" } ] } }, "outros_documentos": { "existe_informacao": "NAO" } } }  
      como faço para pegar esse json e mostrar cada um exe: comercial: -- , outros documentos: --
       
    • Por _badi_
      Preciso de ajuda! Pode parecer uma dúvida besta, mas sou nova nessa área e não estou conseguindo resolver essa questão da facul!
      A questão é:
      1)      Faça o fluxograma e depois faça o código em Javascript de um programa  que lê  3 notas obtidas por um aluno e depois calcule  e imprima a média dos para avaliação, usando  a fórmula abaixo. Imprimir depois o conceito, conforme a tabela abaixo. Use o prompt no javascript e um botão que mostre a média e o conceito depois que do clique no mesmo.
      MA = (Nota1 + Nota2 x 2 + Nota3 x 3 + ME )/7
      Média de Aproveitamento
      Conceito
      10
      A
      7,5 e < 10
      B
      4,0 e < 7,5
      C
      < 4,0
      D
       
      Meu código ficou assim:
      <!DOCTYPE html> <html> <head>      </head> <body> Para calcular sua media e saber seu conceito, clique no botao abaixo: <br> <br> <button onclick='mostra()'>Try it</button> <p id="resp"></p> <br> <br> <script>     function mostra(){         var nota1 = prompt ("Digite a nota 1");         var resp1 = parseInt (nota1);         var nota2 = prompt ("Digite a nota 2");         var resp2 = parseInt (nota2);         var nota3 = prompt ("Digite a nota 3");         var resp3 = parseInt (nota3);         var ME = (resp1 + resp2 + resp3)/3;         var MA = resp1 + (resp2 * 2) + (resp3 * 3) + ME/7;         if (MA=10) {             document.getElementById("resp").innerHTML=("Sua media foi " + ME + " e seu conceito foi A!");         } else if (MA=7.5&&MA<10){             document.getElementById("resp").innerHTML=("Sua media foi " + ME + " e seu conceito foi B!");         } else if (MA=4&&MA<7.5){             document.getElementById("resp").innerHTML=("Sua media foi " + ME + " e seu conceito foi C!");         } else if (MA<4){             document.getElementById("resp").innerHTML=("Sua media foi " + ME + " e seu conceito foi D!");         }         }          </script> </body> </html>  
      Mas sempre volta como conceito A, não importa os valores que coloco :(
      Obrigado!
       
×

Informação importante

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