To return the function variable in Jquery

Asked

Viewed 852 times

0

Hello I would like to return the state variable to inside another function. How do I do this? The returned variable in returnEndereco is Undefined.

  function retornaEndereco()
  {
  $('.informacoes-perfil-endereco').css('display','none');
  var parseResult = "";
  var itemHTML = "";
  var resultadoBairro = "";
  var getEnderecoLogado = sessionStorage.getItem("dadosendereco");
  var quantidadeEndereco = parseResult.length;
  var listaEnderecos = $(".informacoes-perfil-endereco .box-content");
  parseResult = JSON.parse(getEnderecoLogado);

  if (parseResult == null)
  {
    console.log('Não há informações de endereço cadastradas');
  }
  else
  {
    $('.atualizar-cadastro-endereco').css('display','none');
    $('.informacoes-perfil-endereco').css('display','block');

    parseResult.forEach(function(item)
    {

      if (item.bairroendereco == "Selecione...")
      {
        resultadoBairro = "Não há bairro para a localidade";
      }
      else
      {
        resultadoBairro = item.bairroendereco;
      }

      // retorna as cidades em o id da cidade
    RETORNAR AQUI  var nomeestado = estadoEditar(item.estadoendereco);
      var nomecidade = cidadeEditar(item.estadoendereco, item.cidadeendereco);

    //  alert(nomeestado);

      itemHTML += "<div class='cependerecotexto'>Cep: <strong>" + item.cependereco  + "</strong></div>";
      itemHTML += "<div class='logradouroenderecotexto'>Logradouro: <strong>" + item.logradouroendereco + "</strong></div>";
      itemHTML += "<div class='numerologradourotexto'>Número: <strong>" + item.numeroendereco + "</strong></div>";
      itemHTML += "<div class='complementologradourotexto'>Complemento: <strong>" + item.complementoendereco + "</strong></div>";
      itemHTML += "<div class='estadocomplementotexto'>Estado: <strong>" + nomeestado + "</strong></div>";
      itemHTML += "<div class='cidadecomplementotexto'>Cidade: <strong>" + nomecidade + "</strong></div>";
      itemHTML += "<div class='bairrocomplementotexto'>Bairro: <strong>" + resultadoBairro + "</strong></div><br />";
      itemHTML += "<a href='' title='Atualizar o Endereço' class='btn-atualizar-endereco-seg-parte' style='font-weight: bold; font-size: 15px; text-decoration: underline;'>Atualizar o Endereço</a>";

    });

    listaEnderecos.append(itemHTML);
  }
}

 function estadoEditar(idEstado)
  {
    var id_estadoselecionado = "";
    var nomeestado = "";
    $.ajax({
      url: urlBase + "estado",
      method: 'GET'
    }).done(function(retorno)
    {
      $.each(retorno.data, function (i, item)
      {
        idestadoSelecionado = item.estado_id;
        if (idestadoSelecionado == idEstado)
        {
          nomeestado = item.nome;
        }
      });
    RETORNAR LA NA OUTRA FUNÇÃO        return nomeestado;
    }).fail(function(data)
    {
      console.log(data);
    });
  }

// I just improved the tabulation

1 answer

1


From what I’ve seen here, literally you won’t be able to return the result this way, because when you do the Return within the jQuery method, it is returning yes but to the scope of the jQuery method not of your state Function.Dictate(idState), get it? (It’s kind of confusing to even understand this)

Nowadays we have features in the new version of Javascript that give us asynchronous solutions, yes this your problem is an asynchronous problem.

For example our Promises

But I believe you are not using new JS features, so I recommend you make a callback to acquire the value you need

Code

Instead of simply passing the state id to the function, change to the following form:

function estadoEditar(idEstado, callback)

done this, modify the code of your AJAX to the following form:

where this:

return nomeestado;

change to

callback(nomeestado)

to use this method, try to do as follows:

estadoEditar(idEstado, function (nomeEstado) {
    console.log(nomeEstado)
    // após pegar o nome do estado, continue sua lógica aqui dentro
})

I hope it helps you!

Browser other questions tagged

You are not signed in. Login or sign up in order to post.