Pergunta

Existe uma maneira de ouvir para uma função javascript para sair? Um gatilho que pode ser configurado quando uma função foi concluída?

Eu estou tentando usar uma técnica de interface de usuário ofuscação (BlockUI), enquanto um objeto AJAX está recuperando dados do DB, mas a função não necessariamente executar passado, mesmo se você colocá-lo no final da chamada de função.

Exemplo:

function doStuff() {
  blockUI();
  ajaxCall();
  unblockUI();
};

Existe uma maneira para doStuff para ouvir ajaxCall para ser concluída, antes de disparar o unBlockUI? Como é, ele processa a função linearmente, chamando cada objecto a fim de, em seguida, um segmento separado é gerado para completar cada um. Assim, embora a minha chamada AJAX pode levar 10-15 segundos para completar, eu só estou bloqueando o usuário para apenas uma fração de segundo, devido à execução linear da função.

Existem maneiras menos elegantes em torno desta ... colocando um loop para só acabam quando um conjunto de valor de retorno pela função AJAX é definido como verdadeiro, ou algo dessa natureza. Mas isso parece desnecessariamente complicado e ineficiente.

Foi útil?

Solução

No entanto, você está realizando suas rotinas de Ajax, o que você precisa é uma função "callback" que será executado uma vez que está completo:

function ajaxCall(callback){
    //do ajax stuff...
    callback();
}

Depois:

function doStuff(){
    blockUI();
    ajaxCall(unblockUI);
}

Outras dicas

A sua chamada AJAX deve especificar uma função de chamada de retorno. Você pode chamar o unblockUI de dentro do callback.

Sajax é uma biblioteca AJAX simples que tem mais ajuda sobre como fazer chamadas AJAX.

Há também outro post que descreve o que você está procurando.

Você pode fazer uma xhr síncrona. Isso faria com que o bloco UI inteira para a duração da chamada (não importa quanto tempo isso pode levar).

Você precisa redesenhar o seu fluxo de programa para ser compatível com o fluxo de asynchronus, como especificar uma função de retorno de chamada a ser chamado após a resposta é processado. Confira como protótipo ou JQuery ou ... faz isso.

A resposta é simples, você tem que chamar unblockUI () quando o seu pedido ajax retorna o resultado, usando jQuery você pode fazê-lo como este:

function doStuff(){

    blockUI();

    jQuery.ajax({
        url: "example.com",
        type: "POST",           //you can use GET or POST
        success: function(){

            unblockUI();
        }
    });
}

Parece-me que você quer que o usuário aguarde enquanto informações está sendo buscada a partir do db. O que eu faço quando eu fazer uma chamada Ajax para algumas informações do banco de dados é exibir um GIF animado que diz "consegui-lo ..." - ele pisca continuamente até que a informação é recuperado e exibido na página web. Quando a informação é apresentada, o GIF animado é desligado / oculto e o foco é movido para a nova informação que está sendo exibido. O gif animado permite que o know usuário que algo está acontecendo.

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