hur man skickar in Ajax-formulär med JQuery

introduktion

jQuery kan kopplas ihop med formulärinsändning för att hantera validering. Detta har fördelen att ge användarna feedback om eventuella fel i deras inmatning.

Animerad gif som visar en användare som fyller i ingångar i ett formulär och tar emot ett framgångsmeddelande.

i denna handledning kommer du att presenteras med ett provformulär som kommunicerar med en PHP-backend. Formuläret använder jQuery för att bearbeta ett formulär utan en siduppdatering (med AJAX), ange eventuella fel och visa också ett framgångsmeddelande.

förutsättningar

för att slutföra denna handledning behöver du:

  • denna handledning förutsätter att du har PHP installerat lokalt och kan köra den inbyggda webbservern. Du kanske kan konsultera en av våra handledning för att installera PHP i din miljö.
  • viss förtrogenhet med väljare och metoder från jQuery-biblioteket.
  • viss kännedom om klasser från Bootstrap-biblioteket.
  • en kodredigerare.
  • en modern webbläsare.

Obs: Denna handledning anger inte de senaste versionerna av jQuery (för närvarande 3.5.1) eller Bootstrap (för närvarande 5.0.0-beta1). Men många av lektionerna i denna handledning gäller fortfarande de senaste versionerna.

denna handledning verifierades med PHP v7.3.24, jQuery v2.0.3 och Bootstrap v3.0. 3.

Steg 1-Bygga Backend med PHP

i denna handledning kommer backend att skrivas i PHP.

öppna först ett terminalfönster och skapa en ny projektkatalog:

  • mkdir jquery-form-validation

navigera till den här nya projektkatalogen:

  • cd jquery-form-validation

använd sedan din kodredigerare för att skapa en ny process.php fil:

process.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);

den här filen TAR värden för name, email och superheroAlias. Om något av dessa värden inte anges skickas ett felmeddelande tillbaka. Många andra valideringar kan utföras vid denna tidpunkt, men i denna handledning kommer du bara att se till att dessa nödvändiga ingångar har tillhandahållits. Annars, om ett värde för name, email och superheroAlias finns, skickas ett framgångsmeddelande tillbaka.

notera: I ett verkligt scenario skulle backend också vara ansvarig för andra uppgifter som att ta data och spara ändringar i en databas, skapa en session eller skicka ett e-postmeddelande.

nu när du har slutfört formulärbehandlingen kan du skapa formuläret.

steg 2-Bygga Frontend med HTML och CSS

i denna handledning kommer Bootstrap att användas för att bygga ut vyerna.

Använd din kodredigerare i din projektkatalog för att skapa en index.html fil:

index.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>

CDN (content delivery network) version av Bootstrap och jQuery kommer att refereras. Formulärets action kommer att ställas in på PHP-filen som skapades tidigare. Formuläret kommer att bestå av fält för name, email och superheroAlias. Formuläret behöver också en Skicka-knapp.

öppna ett terminalfönster och navigera till projektkatalogen. Och kör PHP-servern:

  • php -S localhost:8000

besök localhost:8000 i din webbläsare och observera följande:

skärmdump av ett formulär med fält för Namn, e-post och Superhjältealias.

nu när du har fyllt i formuläret kan du skapa skriptet för att hantera formulärinsändning.

steg 3-hantering av formulär skicka logik i JavaScript och jQuery

för att skicka in ett formulär via AJAX måste ditt skript hantera fyra uppgifter:

  • fånga formuläret Skicka knappen så att standardåtgärden inte äger rum.
  • Hämta Alla data från formuläret med jQuery.
  • skicka formulärdata med AJAX.
  • visa fel om det finns några.

Använd din kodredigerare i din projektkatalog för att skapa en ny form.js fil:

form.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(); });});

den här koden hämtar data från fälten name, email och superheroAlias. Den utför sedan en Ajax-begäran till process.php med en nyttolast av formulärdata. Efter en lyckad anslutning loggar konsolen svardata. event.preventDefault() används för att förhindra att formuläret fungerar som standard genom att ladda om sidan vid inlämning.

när du har sparat dina ändringar till form.js, besök filen index.html med din kodredigerare. Lägg till en referens till den nya JavaScript-filen:

index.html
<!DOCTYPE html><html> <head> <title>jQuery Form Example</title> <!-- ... --> <script src="form.js"></script></head><!-- ... -->

nu när en användare trycker på Skicka-knappen på formuläret kommer JavaScript-koden att hämta alla inmatningsvärden och skicka en postförfrågan till process.php.

Obs: du kommer att använda .done återuppringning för att hantera en lyckad Ajax begäran. Detta brukade kallas .success, men det har sedan dess avvecklats i jQuery 1.8+.

ett annat alternativ är att använda serialize istället för att dra formulärinformationen individuellt.

PHP-skriptet kommer att bearbeta ingångarna som AJAX-samtalet skickade och returnera $data – arrayen som skapades. Du kan observera detta i webbläsarens konsol när du har skickat in ditt formulär:

skärmdump av web DevTools-konsolen i webbläsaren som visar de data som returneras vid inlämning av ett formulär - framgång: sant, meddelande: framgång!

nu när du har formulärlogiken klar kan du skapa skriptet för att hantera formulärfel.

steg 4-visar Formulärvalideringsfel

i PHP-skriptet kontrollerar koden för att säkerställa att alla fält krävs. Om ett fält inte finns, skickas ett fel tillbaka.

återbesök form.js och Lägg till följande markerade kodrader:

form.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(); });// ...

den här koden kontrollerar om svaret innehåller Ett fel för varje fält. Om ett fel är närvarande lägger det till en has-error – klass och lägger till felmeddelandet.

gå nu igenom formuläret i en webbläsare och experimentera med att skicka in data med formuläret.

om det finns några fel som kommer tillbaka från servern kommer formuläret att ge feedback på alla obligatoriska fält:

skärmdump av exempelformuläret som visar fel för inmatningsfält för Namn, e-post och superhjälte.

och om det inte finns några fel som kommer tillbaka från servern, kommer formuläret att ge feedback för en lyckad inlämning:

skärmdump av exempelformuläret som visar ett framgångsmeddelande.

varje gång vi skickar in formuläret finns våra fel från vår tidigare inlämning fortfarande kvar. Du måste rensa dem genom att ta bort dem så snart formuläret skickas in igen.

återbesök form.js och Lägg till följande markerade kodrader:

formen.js
// ... $("form").submit(function (event) { $(".form-group").removeClass("has-error"); $(".help-block").remove(); // ... });// ...

den här koden tar bort Klassen has-error från alla .form-group – element. Det tar också bort alla .help-block – element med felmeddelanden.

Steg 5-visar Serveranslutningsfel

om det finns ett fel vid anslutning till servern kommer det inte att finnas något JSON-svar från Ajax-samtalet. För att förhindra att användare väntar på ett svar som aldrig kommer fram kan du ange ett felmeddelande för anslutningsfel.

återbesök form.js och Lägg till följande markerade kodrader:

form.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>' ); });// ...

om servern är trasig eller nere av någon anledning får en användare som försöker skicka ett formulär ett felmeddelande:

skärmdump av exempelformuläret som visar ett felmeddelande om att det inte går att nå servern.

nu när du har serverfelmeddelandet slutfört har du fyllt i exempelformuläret.

med användning av $.post istället för $.ajax

jQuery ger också en $.post stenografi metod som ett alternativ till $.ajax.

$.ajax koden i form.js kan skrivas om med $.post:

$.post('process.php', function(formData) { // place success code here}) .fail(function(data) { // place error code here });

fördelen med $.post är att det inte kräver så mycket Anslutningskonfiguration som ska deklareras.

slutsats

i den här artikeln byggde du ett exempelformulär som kommunicerar med en PHP-backend med jQuery och visar eventuella fel i formuläret.

som nästa steg vill du utforska mer komplexa valideringar som giltiga e-postadresser och datum. Du kanske också är intresserad av att tillämpa valideringar på klientsidan som fungerar i webbläsaren.

om du vill lära dig mer om JavaScript, kolla in vår JavaScript-ämnessida för övningar och programmeringsprojekt.

Leave a Reply

Din e-postadress kommer inte publiceras.