Ir para conteúdo

POWERED BY:

Arquivado

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

Daniel Fernandes Silva

[Resolvido] Problemas com escopo de variável

Recommended Posts

Olá, pessoal!

 

Estou com problemas quanto ao escopo de uma variável. A situação é a seguinte: tenho uma função, dentro dela faço uma requisição.

 

function enviarMensagem( idMensagem ) {
   var total = 0, restante = 0, destinatarios = new Array();

   $.post(
           'selecionarDestinatarios.php',
           function( resposta ) {

                   destinatarios = resposta.split( ":" );
                   total         = destinatarios.length;

                   alert( "Total interno: " + total );
           }
   );

   alert( "Total externo: " + total );
}

 

Este é um simples exemplo, similar à função que tenho aqui! O problema, é que, no alert(); interno, o valor da variável total é exibido normalmente, mas no externo, ele permanece com o valor 0.

 

Se alguém puder me ajudar, ficarei grato!

Obrigado.

 

Daniel Fernandes Silva

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso é pq o ajax roda assincronamente.

 

o resto do teu script não aguarda o retorno do ajax, para ser executado.

Veja:

 

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Excelente! Agora eu entendi o motivo do erro. Muito obrigado William Bruno.

 

Quem for ler este tópico em um futuro próximo, este artigo também pode ajudar: http://api.jquery.com/jQuery.ajax/

 

Resolvi o problema da seguinte forma:

 

function enviarMensagem( idMensagem ) {
   var total = 0, restante = 0, destinatarios = new Array();

   $.ajax({
       url: 'selecionarDestinatarios.php',
       async: false // define o modo como sincrono
   })
   .done(function( resposta ) {
       destinatarios = resposta.split( ":" );
       total         = destinatarios.length;

       alert( "Total interno: " + total );
   })
   ;

   alert( "Total externo: " + total );
}

 

 

Resolvido!

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.