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 Gih Peixoto
      Boa noite, eu preciso fazer uma linha do tempo, e queria que ela fosse animada, por exemplo: quando o usuário da scroll na tela, as informações  (imagens)  começam a aparecer. Eu achei um código para essa parte, mas eu não queria que a imagem simplesmente brotasse na tela, eu queria que ela deslizasse dos cantos da tela e parasse do lado da linha. Alguém sabe como fazer algo parecido com isso? Espero que de para entender a explicação.
    • By VCastilho
      Bom Dia Estou tentando aplicar um HTML com Javascript no Portifólio do Meu Wordpress Mas assim que coloco ele deforma, como as imagens no final:  Em vez de modificar apenas horizontalmente, modifica também verticalmente, iguais as imagens, conferi o código e não localizei algo que causa isso, sendo que se visualizar o código no navegador, esta normal. A parte que esta desalinhado creio que consigo arrumar depois com o CSS Segue o código completo: <!doctype> <html> <head> <meta charset="utf-8"> <style> * { font-size: 16px; box-sizing: border-box; } button { display: block; margin: auto; } article { position: relative; display: inline-block; } aside { height: 200px; max-width: 260px; font-size: 3.2rem; font-weight: bold; line-height: 200px; display: inline-block; vertical-align: bottom; } aside#left { text-align: right; padding-right: 2rem; } aside#right { text-align: left; padding-left: 2rem; } .img-comp-container { height: 200px; min-width: 820px; position: relative; text-align: center; } .img-comp-img { width: 300px; height: 200px; overflow: hidden; position: absolute; } .img-comp-img img { display: block; vertical-align: middle; } .img-comp-slider { position: absolute; z-index: 9; cursor: ew-resize; width: 24px; height: 24px; background-image: url("http://images.tcdn.com.br/678962/themes/37/img/clicker1.png?325.80026377726244"); opacity: 1; } </style> </head> <body> <button onclick="initComparisons()">Centralizar ajustes</button> <div class="img-comp-container"> <aside id="left">Antes</aside> <article> <div class="img-comp-img "> <img src="https://www.lupadigital.info/wp-content/uploads/2018/05/imagens-gratis.jpg" width="280" height="200" alt="" /> </div> <div class="img-comp-img img-comp-overlay"> <img src="http://s2.glbimg.com/7B_srQyXERP_NoJCHSzgOnuwsyc=/smart/e.glbimg.com/og/ed/f/original/2017/07/26/best-sapce-photos-2017-designboom-10.jpg" width="280" height="200" alt="" /> </div> </article> <aside id="right">Depois</aside> </div> <script> slider = document.createElement("DIV"); slider.setAttribute("class", "img-comp-slider"); console.log(getId('right')); getId('right').style.width = getId('left').offsetWidth; function initComparisons() { var x, i, c, cc; getId('left').style.color = "#808080"; getId('right').style.color = "#808080"; x = document.getElementsByClassName("img-comp-overlay"); for (i = 0; i < x.length; i++) { x[i].style.width = "300px"; compareImages(x[i]); } function compareImages(img) { var clicked = 0, w = img.offsetWidth, h = img.offsetHeight; img.style.width = (w / 2) + "px"; img.parentElement.insertBefore(slider, img); img.parentElement.style.width = w; img.parentElement.style.height = h; slider.style.top = (h / 1) - (slider.offsetHeight / 2) + "px"; slider.style.left = (w / 2) - (slider.offsetWidth / 2) + "px"; slider.addEventListener("mousedown", slideReady); window.addEventListener("mouseup", slideFinish); slider.addEventListener("touchstart", slideReady); window.addEventListener("touchstop", slideFinish); function slideReady(e) { e.preventDefault(); clicked = 1; window.addEventListener("mousemove", slideMove); window.addEventListener("touchmove", slideMove); } function slideFinish() { clicked = 0; } function slideMove(e) { var pos; if (clicked == 0) return false; pos = getCursorPos(e) if (pos < 0) pos = 0; if (pos > w) pos = w; slide(pos); } function getCursorPos(e) { var a, x = 0; e = e || window.event; a = img.getBoundingClientRect(); x = e.pageX - a.left; x = x - window.pageXOffset; return x; } function slide(x) { c = 225 * x / w; cc = 225 - c; getId('right').style.color = "rgb(" + c + ',' + c + ',' + c + ")"; getId('left').style.color = "rgb(" + cc + ',' + cc + ',' + cc + ")"; img.style.width = x + "px"; slider.style.left = img.offsetWidth - (slider.offsetWidth / 2) + "px"; } } } function getId(ref) { return document.getElementById(ref); } initComparisons(); </script> </body> </html> Sendo que estou tentando utilizar tudo no mesmo arquivo, com o e o Estou fazendo errado? Há uma forma correta?

    • By CrysMorais
      Boa tarde pessoal,
      Sou nova por aqui e também sou nova na programação, e gostaria da ajuda de alguém, se possível.
      Eu montei uma pagina que cria questionários, onde o usuário  pode criar perguntas com 4 tipos de respostas (Radio, Checkbox, Text e Number).
      Porém não sei como verificar se no questionário, foi criado pelo menos uma pergunta de cada tipo.
       
      Montei assim:
       
      <select name="tipoconsquestao" id="tipoconsquestao" style="color:#000000; font-size:9px; width:130px; ">
                   <option value="1" selected >Única escolha</option>
                   <option value="2">Múltipla escolha</option>
                   <option value="3">Texto livre</option>
                   <option value="4">Número livre</option>
      </select>
       
      Criei um bloco desses para cada tipo de pergunta:
       
      <%if (ArrayQuestions(6,i) = 1) then%>
      <td width="8%" align=center>
             <input name="<%=conta_grupo%>" data-sm-tipo="<%=ArrayQuestions(6,i)%>" data-sm-vrmaxquestao="<%=ArrayQuestions(11,i)%>" data-sm-questao-numero="<%=ArrayQuestions(2,i)%>"  data-sm- alternativa="<%=ArrayQuestions(3,i)%>" data-sm-questao="<%=conta_grupo%>" id="<%=conta_Alternativa%>" type="radio" value="<%=ArrayQuestions(3,i) %>" <%if ArrayQuestions(4,i) = 1 then response.write "checked"%>/>
      </td>
      <td width="92%" >&nbsp;&nbsp;&nbsp;<b><%=ArrayQuestions(1,i)%><b></td>
      <% end if %>
       
       
      Recebo aqui:
       
              var arrayquestoes = [];
              var arrayalternativas = [];
              var questionarioRadio = [];
              var questionarioCheck = [];
              var questionarioText = [];
              var questionarioNum = [];
       
      for (var i = 1; i <= n_grupos; i++) {
                  var countRadio = 0;
                  var countCheck = 0;
                  var countText = 0;
                  var countVrText = 0;
                  var countVariosVrText = 0;
                  var countNum = 0;
                  
                  $("[data-sm-questao='" + i + "']").each(function (index, value) {
                      var questao = $(this).attr("data-sm-questao-numero");
                      var alternativa = $(this).attr("data-sm-alternativa");
                      //alert(alternativa);
                      var vralternativa = $(this).val();
                      var tipoalternativa = $(this).attr("data-sm-tipo");
                      
                      
                      vrmaxtotalizacao = $(this).attr("data-sm-vrmaxquestao");
                      
                      
                      arrayquestoes[i - 1] = questao;
          
                      //==============================================================================================================    
                      // Verifica todos os campos tipo questão 1 (Radiobuttons) e carrega o array questionarioRadio com true ou false
                      //==============================================================================================================  
                      if (eval(tipoalternativa) == 1)
                      {
                          if (this.checked) {
                              questionarioRadio[countRadio] = true;
                              if (textoalternativas == '') {
                                  textoalternativas = questao + '|' + alternativa + '|' + 1;
                              }
                              else {
                                  textoalternativas = textoalternativas + ';'+ questao + '|' + alternativa + '|' + 1;
                              }
                          }
                          else
                          {
                              questionarioRadio[countRadio] = false;
                          }
                          countRadio = countRadio + 1;
                          //console.log(cont);
                          
                      }
       
       
          Faço a validação aqui:
       
                
       for (var k = 0; k < questionarioRadio.length; k++) {
                  if (questionarioRadio[k])
                  {
                      if (!saidafinalRadio)
                      {
                          saidafinalRadio = true;
                      }
                  }
              }
              if (questionarioRadio.length == 1)
              {
                  saidafinalRadio = true;
              }
      }
       
      if (!saidafinalRadio)
              {
                  alert('Por favor responda todas as questões de única escolha.');
                  return;
              }
       
       
      E mando para o banco de dados.
       
       
       
    • By Anderson Ronilson Xavier
      Olá a todos gostaria da ajuda dos colegas estou em um projeto de site landing page  usando o plugin construtor de sites chamado themify ultra e não estou conseguindo uma galeria de imagens igual ao cliente está me pedindo que responsiva e com um menu que tenha as opções por exemplo "todas maçã banana laranja " se eu clicar em maçã a galeria ocultaria as bananas e Laranja e se eu clicar em todas e voltaria a apresentar todas as frutas ... Desculpa o jeito de explicar ... Mas galeria não estou conseguindo achar nada que me ajude a opção do themify ultra foi do próprio cliente que já tinha e acabei topando por fazer usando ele mesmo mas no site do themify não achei nenhum pluguin interessante a galeria deles é a padrão do WordPress será que teria como eu usar alguma outra os colegas tem alguma sugestão? 
       Vou deixar um site que o cliente deixou de modelo de como ele gostaria de que dele ficasse
       
      www.levelmont.com.br
       
      Grato pelo ajuda dos colegas.
       
       
×

Important Information

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