Ir para conteúdo

POWERED BY:

Arquivado

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

Matheus Bruno

[Resolvido] Problemas com sincronismo na função pai de "&#036

Recommended Posts

Estou chamando uma função que executa uma requisição síncrona da seguinte maneira:

 

Chamada:

var CEP = buscaCep(cep);

 

Função Chamada:

function buscaCep(cep){
   url = "http://cep.republicavirtual.com.br/web_cep.php?formato=javascript&cep="+ cep;
   var ret;
   $.ajax({
url: url,
dataType: "script",
async: false,
success: function(){
    ret = resultadoCEP;
}
   })
   return ret;
}

 

Porem, minha função "buscaCep" retorna o valor nulo antes de completar a requisição me causando problemas.

Existe alguma maneira da função "buscaCep" retornar o valor só quando a requisição for concluída?

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

existe sim, jQuery implementou um objeto chamado: deferred:

 

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Da forma que você está fazendo, não, pois a requisição Ajax é assíncrona. Para resolver o seu problema, pode-se recorrer à dois metódos, você passa um callback que será passado para o success.

Algo como:

var buscaCep = function( cep, callback ) {
   //...
   $.ajax({
       //...
       success : function( data ) {
           callback( data );
       }
   });
};

 

Ou usa o objeto Deferred retornado pelo metódo Ajax do jQuery. Essa seria a forma mais elegante.

var buscaCep = function( cep ) {
   // ...
   return $.ajax({
       //...
   });
};

buscaCep( '12345-000' ).done( function( data ) { 
   //resultadoCep está acessivel
});

 

Leia mais sobre o objeto Deferred :seta: http://api.jquery.com/category/deferred-object/ e http://net.tutsplus.com/tutorials/javascript-ajax/wrangle-async-tasks-with-jquery-promises/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Da forma que você está fazendo, não, pois a requisição Ajax é assíncrona.

ou síncrona se assim você pedir para ela ser :lol:

 

O terceiro método seria fazer a requisição ser sincrona =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

ou síncrona se assim você pedir para ela ser :lol:

 

O terceiro método seria fazer a requisição ser sincrona =)

 

 

É tinha esquecido. Mas pelo próprio nome, Ajax não foi feito para ser sincrono. :lol:

 

Pode-se usar o primeiro metódo, mas aí iria ficar callback por cima de callback, Deferred all the way. :grin:

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.