Ajax com jQuery: Como evitar múltiplas requisições ao servidor
Aprenda neste conteúdo como bloquear um botão utilizando jQuery, algo muito útil para evitar múltiplos cliques e, consequentemente, várias requisições ao servidor.
Quando efetuamos um click no botão, o jQuery monitora este evento e executa uma função anônima, que contém uma requisição HTTP (Ajax) e altera as propriedades no HTML, entre outras ações. Veja como funciona este comportamento na Figura 1.
Evento click do jQuery
O evento click é enviado para um elemento quando o ponteiro do mouse está sobre o elemento e o botão do mouse é pressionado e liberado. Qualquer elemento HTML pode receber esse evento:
$( "#botaoSalvar" ).click(function() {
//Executar alguma instrução
});
Função Prop para manipular propriedades
A diferença entre atributos e propriedades pode ser importante em situações específicas. O método .prop() fornece uma maneira de recuperar explicitamente valores de propriedade. Por exemplo, um checkbox que tem um atributo booleano retornaria com o prop() true ou false.
Atributo disabled
O atributo disabled é um atributo booleano e quando está presente no <button disabled=”disabled” /> determina que o botão deve ser desabilitado. Um botão desativado é inutilizável e não pode ser clicado.
O atributo disabled pode ser configurado para evitar que um usuário clique no botão até que alguma outra condição tenha sido atendida (como o envio de um formulário através de uma requisição ajax).
Função para requisição HTTP através do método GET ($.get())
A função $.get() tem como objetivo realizar a requisição assíncrona ao servidor por meio do método HTTP GET, ou seja, ela é uma forma reduzida de implementar a função $.ajax(), conforme o código abaixo:
$.get( "sorteio.php" ).done(function(resultado) {
});
Nesse caso, informamos primeiramente a URL que receberá a requisição, e como segundo parâmetro, uma função que tratará seu retorno. Nessa função, o argumento resultado será preenchido com o conteúdo retornado pelo servidor.
Função para requisição HTTP através do método POST ($.post())
A função $.post() também é uma forma simplificada de $.ajax(), no entanto, dessa vez as requisições são enviadas por meio do método HTTP POST, como mostra o código abaixo:
$.post( "senha.php" ,{ senha: $("#senha").val() } ).done(function(data) {
});
Função .html() para manipular informações em documento HTML
Em um documento HTML, .html () pode ser usado para obter ou incluir um conteúdo em qualquer elemento. Se a expressão do seletor corresponder a mais de um elemento, somente a primeira partida terá seu conteúdo HTML retornado.
Agora que conhecemos as funções principais para manipular textos e enviar requisições, veremos como funciona uma solicitação assíncrona utilizando o método GET detalhadamente no código a seguir:
$(document).ready(function() {
var botaoSalvar = $( "#botaoSalvar" );
botaoSalvar.click(function() {
botaoSalvar.html('Aguarde...');
botaoSalvar.prop('disabled', true);
$.get( "sorteio.php" )
.done(function(resultado) {
$("#resultadoSorteio").html(resultado);
botaoSalvar.html('Sortear Número');
botaoSalvar.prop('disabled', false);
});
});
});
Linha 01: É utilizada a função ready para executar o código dentro dela apenas quando o documento todo for carregado. Isso é importante para evitar a execução da função que não foi iniciada.
Linha 03: Iniciamos uma variável recebendo o objeto jQuery do botão.
Linha 05: Iniciamos a função click e passamos como parâmetro uma função anônima que vai executar uma ação quando o evento for acionado através do clique do botão.
Linha 07: Agora efetuamos a mudança do texto do botão com a função html(), responsável por pegar o conteúdo de texto do elemento que, neste caso, “<button>Conteúdo<button/>”.
Linha 08: Alteramos a propriedade disabled para true para transformar em um botão desabilitado.
Linha 10: Efetuamos uma requisição HTTP para buscar o resultado em um servidor web.
Linha 11: O manipulador .done() será chamado no caso de um retorno com sucesso, e será executada uma função anônima para processar o resultado que, pelo parâmetro da função, é nomeado de resultado.
Linha 13: Através do .html() adicionamos em uma tag <span/> o texto que retornou da requisição HTTP.
Linha 14: Alteramos o texto do botão novamente com a função .html() retornando o valor anterior.
Linha 15: Voltamos a propriedade disabled para o seu estado inicial, liberando o acesso ao botão.
Veja agora como efetuar uma requisição utilizando o método POST no código abaixo:
$(document).ready(function() {
var botaoSalvar = $( "#botaoSalvar" );
var inputSenha = $( "#senha" );
botaoSalvar.click(function() {
botaoSalvar.html('Aguarde...');
botaoSalvar.prop('disabled', true);
$.post( "senha.php" ,{ senha: $("#senha").val() } )
.done(function(data) {
$("#resultadoAtualizacao").html(data);
botaoSalvar.html('Atualizar Senha');
botaoSalvar.prop('disabled', false);
inputSenha.val('');
});
});
});
Linha 01: É utilizada a função ready para executar o código dentro dela apenas quando o documento todo for carregado. Isso é importante para evitar a execução da função que não foi iniciada.
Linha 03: Iniciamos uma variável recebendo o objeto jQuery do botão.
Linha 04: Temos uma variável inputSenha para receber o objeto do campo input identificado como senha.
Linha 06: Iniciamos a função click e passamos como parâmetro uma função anônima que vai executar uma ação quando o evento for acionado através do clique do botão.
Linha 08: Agora efetuamos a mudança do texto do botão com a função html(), responsável por pegar o conteúdo de texto do elemento ”<button>Conteúdo<button/>”
Linha 09: Alteramos a propriedade disabled para true, transformando em um botão desabilitado.
Linha 11: Efetuamos uma requisição HTTP através do método POST para enviar informações ao servidor web. Estamos enviando como parâmetro a informação preenchida no campo senha.
Linha 12: O manipulador .done() será chamado no caso de um retorno com sucesso, e será executada uma função anônima para processar o resultado que, pelo parâmetro da função é nomeado resultado.
Linha 14: Através do .html() adicionamos em uma tag <span/> o texto que retornou da requisição HTTP.
Linha 15: Alteramos o texto do botão novamente com a função .html() retornando o valor anterior.
Linha 16: Voltamos a propriedade disabled para o seu estado inicial liberando o acesso ao botão.
Sugestão de conteúdo
- Curso jQuery Básico
- Curso Dominando Ajax com jQuery
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo