Executando Ajax via JQuery de modo enfileirado

[ad#texto]

JQuery adicionou uma nova visão sobre o desenvolvimento de interfaces ricas para sites e sistemas Web, afinal, não era mais preciso programar dezenas de linhas em Ajax, poderíamos consumir Ajax de forma simples utilizando as funções da JQuery.

Como todos sabem, por excelência as chamadas de Ajax no JQuery são assíncronas, e quando você está dentro de um laço de repetição e aciona uma URL que irá processar algo para o seu sistema em backend, porém esta execução é lenta e ir chamando via Ajax tem a particularidade de ir executando o laço de repetição até a sua finalização e mesmo que a execução do Ajax não tiver sido finalizada uma nova requisição é feita.

A principio isto não é ruim, porém, em determinados casos é possível que uma execução interfera sobre a outra devido ao fato de que podem manipular a mesma rotina interna, como acertar isto então?

Embora desde a versão 1.5 o JQuery implemente .deferred nas chamadas Ajax é possível que a alteração da sua rotina para um controle de .deferred se torne muito árduo, por isso existem soluções mais simples e que podem servir a um grande leque de situações, a solução mais simples para o processo acima é deixar a execução do Ajax via JQuery de forma síncrona, assim, uma repetição do laço só ocorre quando a requisição Ajax terminar, criando assim um fila única do processo.

Veja um exemplo:

jQuery.ajax({
 url: “/meuScript.php”, //Aqui vai a URL ou script a ser acionado
 async: false, //Aqui você define a execução como síncrona
 jsonp: false, //Controle do fluxo de retorno
 complete: function( /*coloque aqui sua instrução ao finalizar com sucesso a sua requisição*/){ }
});

Viu, muito simples, como tudo em JQuery, embora extremamente simples de se implementada a técnica acima tem um grave problema, por ser uma execução síncrona, o browser ficará congelado, o que não é nada elegante, aguardando o retorno da execução e caso outros scripts precisem se acionados eles terão que esperar a execução da chamada síncrona, não haverá modo de executa-los paralelamente.

Como resolver então?

É simples também, não deixem de acompanhar a solução assíncrona para o problema proposto.

Petter Rafael

Desenvolvedor Web atua com as tecnologias Java e PHP apoiadas pelos bancos de dados Oracle e MySQL. Além dos ambientes de desenvolvimento acima possuiu amplo conhecimento em servidores Apache/Tomcat, Photoshop, Arte & Foto, Flash e mais uma dezena de ferramentas e tecnologias emergentes. Atualmente colabora com o Viablog escrevendo sobre programação e tecnologia.