Ir para conteúdo
Fórum Script Brasil
  • 0

[HELP] Atribuir valor em variavel dentro do retorno ajax


willmk

Pergunta

Para minha surpresa, estava fazendo um código e não consegui de nenhum jeito atribuir o um valor em uma variavel global, dentro do retorno do ajax. Para ser mais específico

$(function(){

var teste = true;

$.post('pagina.php',{},function(data){
      if (data == 1){
          teste = false;
     }
});
alert(teste);
});
teste sempre sera 'true', mesmo o retorno(data) sendo 'false', já dei alert, já tentei chamar uma funcao externa e nada tambem, como:
function ajax(){
$.post('pagina.php',{},function(data){
      if (data == 1){
          return false;
     }
});
return true;
}

teste = ajax();
alert(teste);

alguém sabe o que pode ser feito? muito obrigado desde já!

Editado por willmk
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

function ajax(){
    $.post('pagina.php',{},function(data){
        alertaRetorno(data);
    });
}

ajax();

function alertaRetorno(data) {
    if (data == 1){
        teste = true;
    } else {
        teste = false;
    }
    alert(teste);
}

Ajax é assincrono. Ele não retorna nada.

Link para o comentário
Compartilhar em outros sites

  • 0

Will, o problema aqui é que você não está entendendo o conceito do ajax. o Javascript não "espera" o retorno do ajax pra continuar sua execução. Ele simplesmente passa direto. Pra você contornar isso, você precisa quebrar o script em duas (ou mais partes).

Vamos supor que você tem uma página de registro, e você quer que o javascript confira se o login que o usuário digitou já está cadastrado na base pra poder avisar pra ele.

Como você quer fazer:

function campoLoginBlur() {
    var login = document.getElementById('login').value;
    var jaExiste = $.post('verificaLogin.php',{'login':login},function(jaExiste){
        return jaExiste;
    });
    if (jaExiste) {
        alert('Ops!, parece que esse login já está cadastrado! por favor, escolha outro.');
        document.getElementById('login').value = '';
    }
}
Isso não funciona. O javascript vai disparar o post(verificaLogin.php) e simplesmente vai continuar a execução (chegando no if). O ajax só vai trazer o resultado alguns milesegundos/segundos depois. Quando ele "executar" o return jaExiste, o javascript já está em outro ponto, bem adiante. Como precisa ser feito:
function campoLoginBlur() {
    var login = document.getElementById('login').value;
    var jaExiste = $.post('verificaLogin.php',{'login':login},function(jaExiste){
        recebeRetornoLogin(jaExiste);
    });
}

function recebeRetornoLogin(jaExiste) {
    if (jaExiste) {
        alert('Ops!, parece que esse login já está cadastrado! por favor, escolha outro.');
        document.getElementById('login').value = '';
    }
}
}

Se você ainda não tiver entendido, poste exatamente o seu código javascript e eu te falo como precisa ficar.

Editado por fiote
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...