PHP Ajax Tutorial med eksempel

โšก Smart opsummering

Ajax i PHP lader en webside udveksle smรฅ mรฆngder data med serveren og opdaterer en del af siden uden en fuldstรฆndig genindlรฆsning. Denne gennemgang opbygger en live framework-sรธgning, der forklarer den klassiske XMLHttpRequest-tilgang og det moderne Fetch API-alternativ.

  • ๐Ÿ”„ Hvad Ajax er: Ajax, Asynkron JavaScript og XML opdaterer en del af en side ved at udveksle data med serveren uden en fuldstรฆndig opdatering.
  • โšก Hvorfor bruge det: Ajax understรธtter omfattende, desktop-lignende funktioner sรฅsom autofuldfรธrelse, live validering og afhรฆngige dropdowns.
  • ๐Ÿ–ฅ๏ธ Klient og server: JavaScriptet kรธrer i browseren og kalder et PHP-script, som kun returnerer de data, der er nรธdvendige for at opdatere siden.
  • ๐Ÿ” Livesรธgning: En onkeyup-handler sender hvert tastetryk til et PHP-script, der returnerer matchende framework-navne med det samme.
  • ๐Ÿ“œ XMLHttp-anmodning: Den klassiske tilgang opretter et XMLHttpRequest-objekt og lรฆser responseText, nรฅr anmodningen er fuldfรธrt.
  • ๐Ÿ†• Hent API: Moderne kode erstatter XMLHttpRequest med den promise-baserede fetch-funktion for at opnรฅ renere og mere lรฆsbare anmodninger.
  • ๐Ÿค– AI Assist: AI-vรฆrktรธjer kan konvertere gammel XMLHttpRequest-kode til fetch- eller axios-koder og hjรฆlpe med at fejlfinde fejlende Ajax-anmodninger.

PHP Ajax

Hvad er Ajax?

AJAX stรฅr for asynkron JavaScript & XML. Det er en teknologi, der reducerer interaktionerne mellem server og klient. Den gรธr dette ved kun at opdatere en del af en webside i stedet for hele siden. De asynkrone interaktioner initieres af JavaScript. Formรฅlet med AJAX er at udveksle smรฅ mรฆngder data med serveren uden at siden skal opdateres.

JavaScript er et klientsideskriptsprog. Det udfรธres pรฅ klientsiden af โ€‹โ€‹webbrowsere, der understรธtter JavaManuskript. JavaScript-kode virker kun i browsere, der har JavaScript aktiveret.

XML er akronymet for Extensible Markup Language. Det bruges til at kode beskeder i bรฅde menneske- og maskinlรฆsbare formater. Det er ligesom HTML, men giver dig mulighed for at oprette dine egne brugerdefinerede tags. For flere detaljer om XML, se artiklen om XML.

Hvorfor bruge AJAX?

  • Det tillader udviklingping omfattende, interaktive webapplikationer ligesom desktopapplikationer.
  • Validering kan udfรธres, nรฅr brugeren udfylder en formular uden at indsende den. Dette kan opnรฅs ved hjรฆlp af automatisk udfyldelse. De ord, som brugeren indtaster, sendes til serveren til behandling, og serveren svarer med nรธgleord, der matcher det, brugeren har indtastet.
  • Den kan bruges til at udfylde en rullemenu afhรฆngigt af vรฆrdien af โ€‹โ€‹en anden rullemenu.
  • Data kan hentes fra serveren, og kun en bestemt del af en side kan opdateres uden at indlรฆse hele siden. Dette er meget nyttigt for websidedele, der indlรฆser ting som:
    • Tweets
    • Kommentarer
    • Brugere, der besรธger webstedet, og lignende livedata.

Sรฅdan opretter du en PHP Ajax-applikation

Vi vil skabe en simpel applikation, der giver brugerne mulighed for at sรธge efter populรฆre PHP MVC-rammer.

Vores applikation vil have en tekstboks, hvor brugerne skriver navnene pรฅ frameworksene.

Vi bruger derefter AJAX til at sรธge efter et match og viser derefter frameworkets fulde navn lige under sรธgeformularen.

Trin 1) Oprettelse af indekssiden

index.php

<html>

<head>

<title>PHP MVC Frameworks - Search Engine</title>

<script type="text/javascript" src="auto_complete.js"></script>

</head>

<body>

<h2>PHP MVC Frameworks - Search Engine</h2>

<p><b>Type the first letter of the PHP MVC Framework</b></p>

<form method="POST" action="index.php">

<p><input type="text" size="40" id="txtHint" onkeyup="showName(this.value)"></p>

</form>

<p>Matches: <span id="txtName"></span></p>

</body>

</html>

HER,

  • "onkeyup="showName(this.value)"" udfรธrer JavaScriptfunktionen showName hver gang en tast indtastes i tekstfeltet. Denne funktion kaldes autofuldfรธrelse.

Trin 2) Oprettelse af frameworks-siden

frameworks.php

<?php

$frameworks = array("CodeIgniter","Zend Framework","Cake PHP","Kohana") ;

$name = $_GET["name"];

if (strlen($name) > 0) {

$match = "";

for ($i = 0; $i < count($frameworks); $i++) {

if (strtolower($name) == strtolower(substr($frameworks[$i], 0, strlen($name)))) {

if ($match == "") {

$match = $frameworks[$i];

} else {

$match = $match . " , " . $frameworks[$i];

}

}

}

}

echo ($match == "") ? 'no match found' : $match;

?>

Trin 3) Oprettelse af JS-scriptet

auto_complete.js

function showName(str){

if (str.length == 0){ // exit function if nothing has been typed in the textbox

document.getElementById("txtName").innerHTML=""; // clear previous results

return;

}

if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari

xmlhttp=new XMLHttpRequest();

} else {// code for IE6, IE5

xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

}

xmlhttp.onreadystatechange=function() {

if (xmlhttp.readyState == 4 && xmlhttp.status == 200){

document.getElementById("txtName").innerHTML=xmlhttp.responseText;

}

}

xmlhttp.open("GET","frameworks.php?name="+str,true);

xmlhttp.send();

}

HER,

  • "if (str.length == 0)" kontrollerer strengens lรฆngde. Hvis den er 0, udfรธres resten af โ€‹โ€‹scriptet ikke.
  • "if (window.XMLHttpRequest)..." Internet Explorer version 5 og 6 bruger ActiveXObject til AJAX-implementeringen. Andre versioner og browsere som Chrome og Firefox Brug XMLHttpRequest. Denne kode sikrer, at vores applikation fungerer i bรฅde IE 5 & 6 og moderne browsere.
  • "xmlhttp.onreadystatechange=functionโ€ฆ" kontrollerer, om AJAX-interaktionen er fuldfรธrt, og om status er 200, og opdaterer derefter txtName-span'et med de returnerede resultater.

Trin 4) Test af vores PHP Ajax-applikation

Hvis du har gemt filen index.php i phptuts/ajax, skal du gรฅ til URL http://localhost/phptuts/ajax/index.php

Test af vores PHP Ajax-applikation

Skriv bogstavet C i tekstfeltet. Du fรฅr fรธlgende resultater.

Test af vores PHP Ajax-applikation

Ovenstรฅende eksempel demonstrerer konceptet bag AJAX, og hvordan det kan hjรฆlpe os med at skabe omfattende, interaktive applikationer.

Moderne AJAX med Fetch API'en

XMLHttpRequest-objektet ovenfor fungerer stadig, men dets ActiveXObject-gren til den gamle Internet Explorer er ikke lรฆngere nรธdvendig. Moderne browsere leverer den promise-baserede Fetch API, som foretager den samme anmodning med langt mindre kode.

function showName(str) {
    if (str.length === 0) {
        document.getElementById("txtName").innerHTML = "";
        return;
    }
    fetch("frameworks.php?name=" + encodeURIComponent(str))
        .then(response => response.text())
        .then(text => {
            document.getElementById("txtName").innerHTML = text;
        });
}

Denne version gรธr det samme: den sender den indtastede tekst til frameworks.php og placerer svaret i txtName-span'et. Den bruger ogsรฅ encodeURIComponent til sikkert at undslippe inputtet, og dens promise chain er nem at udvide med fejlhรฅndtering ved hjรฆlp af en catch-blok.

Ofte Stillede Spรธrgsmรฅl

En synkron anmodning blokerer browseren, indtil serveren svarer, hvilket fryser siden. En asynkron anmodning kรธrer i baggrunden, sรฅ siden forbliver responsiv og opdateres, nรฅr dataene ankommer. Ajax bruger den asynkrone model.

Med `fetch` skal du sende en anden argumentindstillingsmetode til POST og en body, og derefter lรฆse $_POST i PHP. Med `XMLHttpRequest` skal du kalde `open('POST', url`, indstille `Content-Type`-headeren og sende de kodede data.

CORS, Cross-Origin Resource Sharing, blokerer browserforespรธrgsler til et andet domรฆne, medmindre den server sender den korrekte Access-Control-Allow-Origin-header. Tilfรธj headeren pรฅ PHP-siden, eller kald en same-origin-header. URL at ordne det.

Ja. Indsรฆt XMLHttpRequest-koden, sรฅ kan AI omskrive den ved hjรฆlp af den promise-baserede fetch API eller axios, tilfรธje fejlhรฅndtering og beholde den samme adfรฆrd. Test resultatet, da svarhรฅndteringen er en smule anderledes.

Ja. Del anmodningskoden og browserkonsollen eller netvรฆrksfejlen, sรฅ kan AI finde en forkert fejl. URL, en CORS-blok, en manglende parameter eller en serverfejl, og foreslรฅ derefter den lรธsning, du kan prรธve.

Opsummer dette indlรฆg med: