Jump to content
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!

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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!!

Share this post


Link to post
Share on other 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.

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 binds
      Olá Caríssimos,
       
      Não tenho muito conhecimento de javascript, desde já agradeço se alguém puder me ajudar.
      Preciso criar uma página simples de validação por idade para acessar uma página, a ideia é simples:
      se a pessoa nasceu antes de 2002 redireciona a página meusite_com_br/maior 
      mas se ela nasceu depois de 2002 redireciona a página meusite_com_br/menor
      Garimpando achei o código abaixo que fiz alguns ajustes, porém não sei como abrir as respectivas paginas meusite_com_br/menor ou meusite_com_br/maior como resultado, o resultado nesse caso são textos:  "MENOR 18" : "MAIOR DE 18"
       
      <!DOCTYPE html> <html> <body> <CENTER> <h2>Validador de Idade</h2> <p>Digite o ano que você nasceu para acessar o site:</p> <input id="age" value="Ex: 1990" /> <br> <button onclick="myFunction()">ACESSAR SITE</button> <p id="demo"></p> <script> function myFunction() {   var age, voteable;   age = Number(document.getElementById("age").value);   if (isNaN(age)) {     voteable = "Você não inseriu um ano válido. <BR> Exemplo: 2020";   } else {     voteable = (age > 2002) ? "MENOR 18" : "MAIOR DE 18";   }   document.getElementById("demo").innerHTML = voteable; } </script> </CENTER> </body> </html>  
      Novamente agradeço a ajuda!
      Luis
       
    • By violin101
      Caros amigos, saudações...
       
      Desculpa em recorrer aos amigos, mas estou com uma dúvida referente a SOMA total de uma coluna da TABELA.
       
      Abaixo postei o trecho onde alimento a Tabela via Javascript.
       
      os Campos(input) são passado dessa forma:
      ====[ qtde......: 3
      ====[ vlrunit...: 1,01
      ====[ vlrtotal..: 3,03
       
      O Problema que estou me deparando é a Soma Total do Campo vlrtotal.
      $("#btn-agregar").on("click",function(){ //Recebe dados do Forumulário e Atualiza a Tabela var qtde = document.getElementById("qtde").value; var vlrunit = document.getElementById("vlrunit").value; var vlrtotal = document.getElementById("vlrtotal").value; if(qtde == "" || vlrunit == "" || vlrtotal == ""){ alert("Atenção! Nenhuma QUANTIDADE ou VALOR foi informado."); } else { html = "<tr>"; html += "<td><input type='hidden' name='idProdutos[]' value='"+infoprd[0]+"'>"+infoprd[1]+"</td>"; html += "<td><input type='hidden' name='descricao[]' value='"+infoprd[2]+"'>"+infoprd[2]+"</td>"; html += "<td style='text-align:center;'>"+infoprd[3]+"</td>"; html += "<td style='text-align:center;'>"+qtde+"</td>"; html += "<td style='text-align:right;'>"+vlrunit+"</td>"; html += "<td style='text-align:right;'>"+vlrtotal+"</td>"; html += "<td style='text-align:center;'>"+ "<button type='button' class='btn btn-danger btn-remove-produto' style='padding: 2px 5px;' title='Remover Item da Lista'>"+ "<span class='fa fa-remove'></span></button></td>"; html += "</tr>"; $("#tbventas tbody").append(html); sumar(); $("#btn-agregar").val(null); $("#descricao").val(null); $("#cod_interno").val(null); $("#prd_unid").val(null); $("#qtde").val(null); $("#vlrunit").val(null); $("#vlrtotal").val(null); } });  
      O trecho do Código abaixo é a função para realizar a soma.
      function sumar(){ subtotal = 0; $("#tbventas tbody tr").each(function(){ subtotal = subtotal + Number($(this).find("td:eq(5)").text()); }); $("input[name=subtotal]").val(subtotal.toFixed(2)); }  
       
      Infelizmente não consigo realizar a Soma do VlrTotal, o sistema mostra apenas NaN, ou apenas 0.
       
      Como consigo efetuar a soma correta no Formato MOEDA ?
       
      Grato,
       
       
      Cesar
       
       
    • By marsolim
      fala rapaziada tudo bem? sabe me dizer se tem diferença de performance, de compatibilidade e etc e tal entre o jquery $(this).val() e o javascript puro this.value? tava tentando pesquisar aqui mas não achei nada sobre.
      grato
    • By SaraAlcaras
      Olá galera! Estou criando um jogo da velha para coloca no meu portfólio, porem estou com um pequeno problema que não consigo resolver.. Quando o jogo finaliza a tela da uma ampliada/expandida no tamanho é quase imperceptível porem é algo que eu gostaria de mudar. Qual propriedade posso usar no css pra evitar que isso aconteça?
       
      Código CSS:

       
      :root{ --O-color: rgb(10, 177, 243); --X-color: rgb(253, 148, 148); --E-color: rgb(0, 0, 0); } * { margin: 0; padding:0; box-sizing: border-box; } body { display: grid; align-items: center; justify-content: center; font-family: grenze; height: 100vh; background-color: rgb(153, 153, 153); } .nextPlayer{ color: rgb(60, 62, 63); border: 1px solid rgb(211, 223, 104); box-shadow: 3px 5px 12px rgb(0, 0, 0); } .players { color: rgb(60, 62, 63); border: 1px solid rgb(211, 223, 104); box-shadow: 3px 5px 12px rgb(0, 0, 0); height: 55px; display: flex; flex-direction: column; justify-content: space-evenly; } .player{ display: flex; } .topo { display: flex; flex-direction: row; align-items: center; justify-content: space-evenly; margin-bottom: 20px; } .topo .players, .topo .nextPlayer { font-family: grenze; font-weight: bold; border-radius: 4px; } .title { font-size: 3rem; color: rgb(60, 62, 63); margin-bottom: 0; } .title2 { display: none; } .board { display: grid; grid-template-columns: repeat(3, 178px); grid-template-rows: repeat(3, 130px); gap: 1rem; cursor: pointer; } .board.game-over{ opacity: 0.10; } .cell { display: grid; align-items: center; justify-content: center; background-color: white; border-radius: 4px; font-size: 2rem; font-weight: bold; color: #00000066; } .cell:not(.O):not(.X):hover { box-sizing: 0 20px 25px -5px rgba(0, 0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0, 0.4); } .cell.O, .cell.X, .game-over .cell { cursor: not-allowed; } .cell.O { background-color: var(--O-color); } .cell.X { background-color: var(--X-color); } footer{ text-align: center; font-size: 30px; } .winner-message{ margin: 1rem; } .winner-message span.O{ color: var(--O-color); } .winner-message span.X{ color: var(--X-color); } .winner-message span.E{ color: var(--E-color); } button { padding: 0.9rem 1.5rem; border: none; border-radius: 5px; box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0, 0.6); background-color: rgb(68, 255, 146); color: white; font-size: 1.2rem; cursor: pointer; } @media only screen and (max-width: 767px) and (orientation:portrait) { body { width: 100%; text-align: justify; } .board{ grid-template-columns: repeat(3, 88px); grid-template-rows: repeat(3, 80px); -webkit-tap-highlight-color: transparent; } button { font-size: 10px; } .cell { border-radius: 3px; font-size: 1rem; } footer { font-size: 13px; } .title { font-size: 1.5rem; display: none; padding: 0.6em; /* transform: translateY(80%); */ } .title2 { display: flex; font-size: 1.5rem; padding: 0.6em; color: rgb(60, 62, 63); } .topo{ flex-direction: column; } .players { height: 65px; width: 95px; align-items: center; } .nextPlayer{ text-align: center; height: 22px; width: 118px; /* transform: translateY(-150%); */ } } @media only screen and (max-width: 767px) and (orientation:landscape) { body { width: 100%; text-align: justify; } .board { grid-template-columns: repeat(3, 60px); grid-template-rows: repeat(3, 60px); -webkit-tap-highlight-color: transparent; } footer { font-size: 0.5rem; display: flex; flex-direction: row; align-items: center; justify-content: space-evenly; } button { font-size: 0.5rem; } .title { font-size: 0.8rem; } .players{ height: 30px; width: 50px; align-items: center; font-size: 0.5rem; } .nextPlayer{ text-align: center; height: 14px; width: 60px; font-size: 0.5rem; } .cell { border-radius: 3px; font-size: 0.8rem; } } @media only screen and (min-width: 991px) and (max-width: 1200px) { body { width: 100%; text-align: justify; } }

×

Important Information

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