Ir para conteúdo

Arquivado

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

Julio Cavallari

Retornar objeto de uma função

Recommended Posts

Estou tentando popular um autocomplete usando javascript, e pra isso criei uma função na qual ele cria o objeto para eu utilizar no autocomplete:

function getAutoCompleteData(){
  var returning = {};
  $.ajax({                
    url: "http://localhost/apinovaguaru/",
    method: "POST",
    data:{
      type: "getclientedata",
    },
    dataType: "JSON",
    success: function(data){
      if(data.result == 1)
      {
        for(var i = 0; i < data.cliente.length; i++){ 
          returning[data.cliente[i].nome] = null;
        }             
        console.log(returning);                 
        return returning;                    
      }              
    }

  });
}

Até ai beleza, quando testo a função logo após o for, vejo que foi criada perfeitamente como o autocomplete aceita. O problema é que na hora de recuperar esses dados a função só me retorna undefined.

var clientes = getAutoCompleteData();
console.log(clientes);//Aqui o retorno é undefined

Minha dúvida é, como faço minha função retornar o objeto que foi criado dentro dela?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Julinho, boa tarde. Acho que seu problema está em você usar uma chamada ajax assíncrona dentro de um método, e fazer o retorno dentro da propriedade success do ajax.

Veja bem: o return de dentro do success, não tem relação com o retorno da sua função, são coisas diferentes, mesmo você mudando valores no escopo da função dentro do ajax. Além disso, o ajax é assíncrono, então mesmo que você coloque o retorno da função, não é garantido que o ajax retorne antes da função terminar. Então eu sugiro duas modificações:

 

function getAutoCompleteData(){
  var returning = {};
  $.ajax({                
    url: "http://localhost/apinovaguaru/",
    method: "POST",
    async: false, //Esta mudança faz com que a execução da função pare até seu ajax retornar, só assim você garante que o valor vai ser modificado antes da função terminar.
    data:{
      type: "getclientedata",
    },
    dataType: "JSON",
    success: function(data){
      if(data.result == 1)
      {
        for(var i = 0; i < data.cliente.length; i++) 
          returning[data.cliente[i].nome] = null;
        console.log(returning);                 
        //return returning;                    
      }              
    }
  });
  return returning //A varíavel foi modificada dentro do success, mas retorna no retorno da função.
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por mateus.andriollo
      Boa tarde,
      Tenho alguns campos numéricos q ao fazer uma select gostaria q retornasse uma legenda
       
      exemplo:
      Status: 0=Inativo / 1=Ativo Condição: 1=Funcionando / 2=Em manutenção / 3=Manutenção Interna   
      Seria algo assim, tenho varias tabelas com estes campos... mas tenho q ficar usando replace.
      Existe uma forma de criar uma função para isso? Nem q na função eu tenha que setar nome do campo, ficando assim:
      Legenda('Status',cadastro.status) 
    • Por Luiz Henrique
      Olá pessoas,
       
      Tenho uma classe e dentro dela várias chamadas para métodos de acordo com a necessidade em outra classe (para obter dados DB), como são muitas e vou duplicar os arquivos, para ganhar tempo queria colocar o nome da classe em uma variável porém não funciona.
       
      use Class1; class Class2 { public $className = 'Class1'; ... $dados = $this->className::function(); // não funciona } Era para gerar isso:
      $dados = Class1::function();
      Se eu der um echo $this->$className, ele me retorno o nome da Class1 porém para executar um método dentro da Class1 não vai, diz que a classe Class1 não existe!
      Tem alguma forma de funcionar isso?
       
      Obrigado.
    • Por ernestovm
      Bom dia.
      Descobri, depois de muito trabalho, um problema esquisito. Tenho duas imagens que chamam funções JavaScript determinadas. Uma funciona e a outra não. Isso no Firefox. No Chrome as duas funcionam perfeitamente. Alguém conhece alguma gambiarra para fazer o Firefox funcionar? Segue os códigos:
      HTML:
      <img src="images/ic_abrir.png" width="70" height="70" onClick="abre_notificacao(<? echo "'".$us_codigo."','".$item."'"; ?>);" style="cursor:pointer" id="p_imagem-<? echo $item; ?>" name="p_imagem-<? echo $item; ?>">
       <img src="images/ic_excluir.png" width="70" height="70" onClick="excluir_notificacao(<? echo "'".$us_codigo."'"; ?>);" style="cursor:pointer">
      JAVASCRIPT:
      <script type="text/javascript">
          function abre_notificacao(codigo,indice) {
              $("#p_imagem-"+indice).attr("src","images/ic_abrir_ok.png");
              $("#ver-"+indice).css("display", "block");
          }
          function excluir_notificacao(codigo) {
              $.post("excluir_notificacao.php", {codigo: codigo}, function(resposta) {
                  confirm(resposta+" ("+codigo+")");
              });
              location.reload();
          }

      </script>
      A Função abre_notificacao(codigo,indice)  funciona perfeitamente nos dois browsers.
      A Função excluir_notificacao(codigo) só funciona no Chrome.
      Obrigado pela luz
    • Por unset
      Olá, estou começando a usar o twig template e estou com uma dúvida e não encontrei a resposta também não sei se é possível mais espero que seja possível
       
      Bom eu tenho um arquivo com várias funções, como eu faço para chamar essas funções no HTML?
       
      Não funciona assim {{ funcao() }}
    • Por Luiz Henrique
      Olá,
      Existe alguma forma de executar a função dentro da mesma?
      EX:
       
      function pai(){
          pai();
      }
       
      Obrigado.
×

Informação importante

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