Ir para conteúdo

POWERED BY:

Arquivado

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

Filipe_Moraes

[Resolvido] Aguardar resposta da função

Recommended Posts

Olá pessoal.

Eu tenho uma função que carrega informações de outro dominio, preciso aguardar pela resposta da função, mas não sei como fazer, veja:

 

function addressToLatLng(_lat,_lng){
   var cAddress = 'Não foi possivel identificar o endereço!';

   $.getJSON(
   'http://nominatim.openstreetmap.org/reverse?format=json&lat='+_lat+'&lon='+_lng+'&zoom=18&addressdetails=1', 
   function(data) { 
       var count = 0;
       for(i in data){if(data.hasOwnProperty(i)){count++;}}
       if(count>0){
           cAddress = data.address.road+", "+data.address.postcode+", "+data.address.village;
   }
   });

   return cAddress;
}

 

Se eu chamar essa função da seguinte maneira, a resposta será sempre "Não foi possivel identificar o endereço!".

alert(addressToLatLng(38.9254,-9.2801));

 

A resposta da função ocorre antes de receber a resposta do servidor "nominatim" conforme o link.

Como faço para esperar a função ser executada e só depois retornar a resposta?

 

Agradeço a ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ou você usa o ajax de forma sincrona, ou você usa o objeto deferred do jQuery:

 

http://wbruno.com.br/2012/01/23/exemplo-de-uso-jquery-deferred-simples/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, funcionou mas tive que dividir a função em duas, ficou da seguinte maneira:

function latLngToAddress(_lat,_lng){
   return $.getJSON(
   'http://nominatim.openstreetmap.org/reverse?format=json&lat='+_lat+'&lon='+_lng+'&zoom=18&addressdetails=1');
}

function extractAddress(_data){
   var count = 0;
   var cAddress = null;

   for(i in _data){if(_data.hasOwnProperty(i)){count++;}}
   if(count>0){cAddress = _data.address.road;}
   return cAddress;
}

 

 

Chamei a função assim:

var cAddress = '';
$.when( latLngToAddress(e.latlng.lat,e.latlng.lng) ).then(function(data){
   cAddress = extractAddress(data);
   //...
}).fail(function(){       
   cAddress = 'Nenhum resultado';
   //...
});

 

Veja, chamei a função "latLngToAddress" que retorna um objeto, não consegui tratar esse objeto na mesma função porque retornava sempre a resposta antes da resposta do servidor, que é o objeto.

 

Obrigado pela sua ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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