como enviar formulários AJAX com JQuery
introdução
o jQuery pode ser emparelhado com o envio de formulários para lidar com a validação. Isso tem o benefício de fornecer aos usuários feedback sobre quaisquer erros em sua entrada.
neste tutorial, você será presenteado com um formulário de amostra que se comunica com um back-end PHP. O formulário usará o jQuery para processar um formulário sem uma atualização de página (usando AJAX), indicar quaisquer erros e também exibir uma mensagem de sucesso.
pré-requisitos
para concluir este tutorial, você precisará:
- este tutorial assume que você tem PHP instalado localmente e é capaz de executar o servidor web embutido. Você pode consultar um de nossos tutoriais para instalar o PHP em seu ambiente.
- alguma familiaridade com seletores e métodos da biblioteca jQuery.
- alguma familiaridade com as classes da Biblioteca Bootstrap.
- um editor de código.
- um navegador moderno.Nota: Este tutorial não especifica as versões mais recentes do jQuery (atualmente 3.5.1) ou Bootstrap (atualmente 5.0.0-beta1). No entanto, muitas das lições deste tutorial ainda pertencem às versões mais recentes.
este tutorial foi verificado com PHP v7. 3.24, jQuery v2.0.3 e Bootstrap v3.0.3.
Passo 1-Construindo o back-end com PHP
para os fins deste tutorial, o back-end será escrito em PHP.
primeiro, abra uma janela de terminal e crie um novo diretório de projeto:
- mkdir jquery-form-validation
navegue até este novo diretório de projetos:
- cd jquery-form-validation
em seguida, use seu editor de código para criar um novo processo
process.php
:.php<?php$errors = ;$data = ;if (empty($_POST)) { $errors = 'Name is required.';}if (empty($_POST)) { $errors = 'Email is required.';}if (empty($_POST)) { $errors = 'Superhero alias is required.';}if (!empty($errors)) { $data = false; $data = $errors;} else { $data = true; $data = 'Success!';}echo json_encode($data);
este arquivo terá valores para
name
,email
esuperheroAlias
. Se algum desses valores não for fornecido, uma mensagem de erro será enviada de volta. Muitas outras validações podem ser realizadas neste momento, mas para os fins deste tutorial, você só garantirá que essas entradas necessárias tenham sido fornecidas. Caso contrário, se um valor paraname
,email
esuperheroAlias
estiverem presentes, uma mensagem de sucesso será enviada de volta.Nota: Em um cenário do mundo real, o back-end também seria responsável por outras tarefas, como pegar os dados e Salvar alterações em um banco de dados, criar uma sessão ou enviar um e-mail.
agora que você tem o processamento do formulário preenchido, você pode criar o formulário.
Passo 2 — Construindo o Frontend com HTML e CSS
para os fins deste tutorial, o Bootstrap será usado para construir as visualizações.
no diretório do projeto, use seu editor de código para criar um arquivo
index.html
:índice.html<!DOCTYPE html><html> <head> <title>jQuery Form Example</title> <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css" /> <script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script></head> <body> <div class="col-sm-6 col-sm-offset-3"> <h1>Processing an AJAX Form</h1> <form action="process.php" method="POST"> <div class="form-group"> <label for="name">Name</label> <input type="text" class="form-control" name="name" placeholder="Full Name" /> </div> <div class="form-group"> <label for="email">Email</label> <input type="text" class="form-control" name="email" placeholder="[email protected]" /> </div> <div class="form-group"> <label for="superheroAlias">Superhero Alias</label> <input type="text" class="form-control" name="superheroAlias" placeholder="Ant Man, Wonder Woman, Black Panther, Superman, Black Widow" /> </div> <button type="submit" class="btn btn-success"> Submit </button> </form> </div> </body></html>
a versão CDN (content delivery network) do Bootstrap e jQuery será referenciada. O
action
do formulário será definido para o arquivo PHP que foi criado anteriormente. O formulário consistirá em campos paraname
,email
esuperheroAlias
. O formulário também precisará de um botão enviar.Abra uma janela de terminal e navegue até o diretório do projeto. E execute o servidor PHP:
- php -S localhost:8000
visite
localhost:8000
no seu navegador da web e observe o seguinte:agora que você tem o formulário preenchido, você pode criar o script para lidar com o envio do formulário.
Etapa 3-manipulação de Formulário enviar lógica em JavaScript e jQuery
para enviar um formulário via AJAX, seu script precisará lidar com quatro tarefas:
- Capture o botão Enviar formulário para que a ação padrão não ocorra.
- obtenha todos os dados do formulário usando jQuery.
- envie os dados do formulário usando AJAX.
- exibir erros se houver algum.
no diretório do projeto, use seu editor de código para criar um novo
form.js
arquivo:formulário.js$(document).ready(function () { $("form").submit(function (event) { var formData = { name: $("#name").val(), email: $("#email").val(), superheroAlias: $("#superheroAlias").val(), }; $.ajax({ type: "POST", url: "process.php", data: formData, dataType: "json", encode: true, }).done(function (data) { console.log(data); }); event.preventDefault(); });});
este código recupera os dados dos Campos
name
,email
esuperheroAlias
. Em seguida, ele executa uma solicitação AJAX paraprocess.php
com uma carga útil de dados de formulário. Após uma conexão bem-sucedida, o console registrará os dados de resposta.event.preventDefault()
é usado para impedir que o formulário se comporte por padrão recarregando a Página no envio.depois de salvar suas alterações em
form.js
, revisite o arquivoindex.html
com seu editor de código. Adicione uma referência ao novo arquivo JavaScript:índice.html<!DOCTYPE html><html> <head> <title>jQuery Form Example</title> <!-- ... --> <script src="form.js"></script></head><!-- ... -->
agora, quando um usuário pressiona o botão Enviar no formulário, o código JavaScript recuperará todos os valores de entrada e enviará uma solicitação POST para
process.php
.Nota: você usará o retorno de chamada
.done
para lidar com uma solicitação AJAX bem-sucedida. Isso costumava ser chamado.success
, mas desde então foi descontinuado no jQuery 1.8+.outra alternativa é usar
serialize
em vez de puxar as informações do formulário individualmente.o script PHP processará as entradas que a chamada AJAX enviou e retornará a matriz
$data
criada. Você pode observar isso no console do seu navegador depois de enviar seu formulário:agora que você tem a lógica do formulário concluída, você pode criar o script para lidar com erros de formulário.
Etapa 4-exibindo erros de Validação de formulário
no script PHP, o código verifica para garantir que todos os campos sejam obrigatórios. Se um campo não estiver presente, um erro será enviado de volta.
revisite
form.js
e adicione as seguintes linhas de código destacadas:formulário.js// ... $.ajax({ type: "POST", url: "process.php", data: formData, dataType: "json", encode: true, }).done(function (data) { console.log(data); if (!data.success) { if (data.errors.name) { $("#name-group").addClass("has-error"); $("#name-group").append( '<div class="help-block">' + data.errors.name + "</div>" ); } if (data.errors.email) { $("#email-group").addClass("has-error"); $("#email-group").append( '<div class="help-block">' + data.errors.email + "</div>" ); } if (data.errors.superheroAlias) { $("#superhero-group").addClass("has-error"); $("#superhero-group").append( '<div class="help-block">' + data.errors.superheroAlias + "</div>" ); } } else { $("form").html( '<div class="alert alert-success">' + data.message + "</div>" ); } }); event.preventDefault(); });// ...
este código verifica se a resposta contém um erro para cada campo. Se um erro estiver presente, ele adiciona uma classe
has-error
e adiciona a mensagem de erro.agora, revisite seu formulário em um navegador da web e experimente enviar dados com o formulário.
se houver algum erro que volte do servidor, o formulário fornecerá feedback sobre os campos obrigatórios:
e se não houver erros que voltem do servidor, o formulário fornecerá feedback para um envio bem-sucedido:
cada vez que enviamos o formulário, nossos erros de nosso envio anterior ainda estão lá. Você precisará limpá-los removendo-os assim que o formulário for enviado novamente.
revisite
form.js
e adicione as seguintes linhas de código destacadas:formulário.js// ... $("form").submit(function (event) { $(".form-group").removeClass("has-error"); $(".help-block").remove(); // ... });// ...
este código removerá a classe
has-error
de todos os elementos.form-group
. Ele também removerá todos os elementos.help-block
com mensagens de erro.Etapa 5-exibindo erros de conexão do servidor
se houver um erro ao conectar-se ao servidor, não haverá resposta JSON da chamada AJAX. Para evitar que os usuários esperem por uma resposta que nunca chegue, você pode fornecer uma mensagem de erro para falhas de conexão.
revisite
form.js
e adicione as seguintes linhas de código destacadas:formulário.js// ... $.ajax({ type: "POST", url: "process.php", data: formData, dataType: "json", encode: true, }) .done(function(data) { // ... }) .fail(function (data) { $("form").html( '<div class="alert alert-danger">Could not reach server, please try again later.</div>' ); });// ...
Se o servidor estiver quebrado ou por qualquer razão, um usuário que tenta submeter um formulário irá obter uma mensagem de erro:
agora que você tem a mensagem de erro do servidor concluída, você completou o formulário de exemplo.
usando $.post em vez de $.ajax
jQuery também fornece um
$.post
método abreviado como uma alternativa para$.ajax
.o código
$.ajax
emform.js
pode ser reescrito com$.post
:$.post('process.php', function(formData) { // place success code here}) .fail(function(data) { // place error code here });
a vantagem de
$.post
é que não requer tanta configuração de conexão a ser declarada.conclusão
neste artigo, você construiu um formulário de amostra que se comunica com um back-end PHP com jQuery e exibe quaisquer erros no formulário.
como próximo passo, você desejará explorar validações mais complexas, como endereços de E-mail e datas válidos. Você também pode estar interessado em Aplicar validações do lado do cliente que funcionam no navegador.
se você quiser saber mais sobre JavaScript, confira nossa página de tópicos JavaScript para exercícios e projetos de programação.