Jump to content
Fórum Script Brasil
  • 0

[HELP] Atribuir valor em variavel dentro do retorno ajax


willmk

Question

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á!

Edited by willmk
Link to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 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 to comment
Share on other sites

  • 0

Continuou a mesma coisa ;s não é o alert que eu preciso, eu preciso mudar o valor da variavel "teste" dependendo do retorno ajax. Porém ela continua sempre o mesmo valor independente da atribuição. Obrigado desde já

Link to comment
Share on other 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.

Edited by fiote
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...