Usando $ .post dentro de uma função javascript, pode não o valor atribuir a uma variável?

StackOverflow https://stackoverflow.com/questions/824431

  •  05-07-2019
  •  | 
  •  

Pergunta

Eu estou tentando usar $ .post dentro de uma função, obter os resultados, em seguida, retornar a função de verdadeiro ou falso com base nos resultados do callback $ .post. No entanto, o retorno de chamada parece ocorrer, após o evento de retorno da função pai.

Aqui está o código atual da variável ret é sempre indefinido, mas se eu alert ()-lo dentro do callback $ .post, ele retorna o resultado correto;

function elementExists(key, type, path, appid, pid){
    var ret;
    $.post('?do=elExists', {key: key, type: type, path: path, appid: appid, pid: pid},function(data){
        ret = data;                         
    });

    alert(ret);
    return ret;

}
Foi útil?

Solução

Como você descobriu o post é feito de forma assíncrona. Se você quer que ele seja síncrona, você precisa usar a ajax método e definir o parâmetro async como falsa. Seria melhor, no entanto, reconhecer que o post é assíncrona e construir o seu código para que a ação executada pela chamada de retorno é independente do método que chama o post. Obviamente, você realmente quer fazer algo diferente do alerta, mas sem saber o que é difícil para aconselhá-lo como refatorar isso.

Editar : Eu entendo que o seu código está verificando para ver se algo existe, mas é a verificação de que para um propósito. Se soubéssemos o que o propósito era, então pode ser possível recomendar como conseguir isso no retorno de chamada para que o método poderia ser reformulado.

Outras dicas

function elementExists(key, type, path, appid, pid){
        $.post('?do=elExists', {key: key, type: type, path: path, appid: appid, pid: pid},function(data){
           alert(data);
        });
  }

a função (de dados) é uma volta chamada (Asynchronous) você não pode retornar valores assim.

que callback não é chamado até que a página é feito de ser chamado, mas o seu "ret retorno" está em execução imediatamente depois de chamar $ .post

Se você quiser configurá-lo conjunto assíncrono syncronous: false

Veja os docs http://docs.jquery.com/Ajax/jQuery.post#urldatacallbacktype

O problema é que seu código é executado de forma assíncrona. Isso é alert (ret) é realmente chamado antes ret = dados, o que acontece quando a solicitação Ajax é concluída.

Você pode fazer a sua ajax chama síncrona (não recomendado), utilizando a assíncrona opção, ou redesenhar o seu código.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top