PHP Ajax handledning med exempel

โšก Smart sammanfattning

Ajax i PHP lรฅter en webbsida utbyta smรฅ mรคngder data med servern och uppdatera delar av sidan utan att behรถva laddas om helt. Den hรคr genomgรฅngen bygger en live-ramverkssรถkning och fรถrklarar den klassiska XMLHttpRequest-metoden och det moderna Fetch API-alternativet.

  • ๐Ÿ”„ Vad Ajax รคr: Ajax, asynkron JavaSkript och XML uppdaterar en del av en sida genom att utbyta data med servern utan en fullstรคndig uppdatering.
  • โšก Varfรถr anvรคnda det: Ajax erbjuder omfattande, skrivbordsliknande funktioner som autofullstรคndig ifyllning, livevalidering och beroende rullgardinsmenyer.
  • ๐Ÿ–ฅ๏ธ Klient och server: JavaSkriptet kรถrs i webblรคsaren och anropar ett PHP-skript, vilket returnerar endast den data som behรถvs fรถr att uppdatera sidan.
  • ๐Ÿ” Live sรถkning: En onkeyup-hanterare skickar varje tangenttryckning till ett PHP-skript som returnerar matchande ramverksnamn direkt.
  • ๐Ÿ“œ XMLHttpRequest: Den klassiska metoden skapar ett XMLHttpRequest-objekt och lรคser responseText nรคr begรคran รคr klar.
  • ๐Ÿ†• Hรคmta API: Modern kod ersรคtter XMLHttpRequest med den promise-baserade hรคmtningsfunktionen fรถr renare, lรคsbara fรถrfrรฅgningar.
  • ๐Ÿค– AI Assist: AI-verktyg kan konvertera gammal XMLHttpRequest-kod till fetch- eller axios-kod och hjรคlpa till att felsรถka misslyckade Ajax-fรถrfrรฅgningar.

PHP Ajax

Vad รคr Ajax?

AJAX stรฅr fรถr asynkron JavaScript & XML. Det รคr en teknik som minskar interaktionerna mellan servern och klienten. Den gรถr detta genom att bara uppdatera en del av en webbsida istรคllet fรถr hela sidan. De asynkrona interaktionerna initieras av JavaSkript. Syftet med AJAX รคr att utbyta smรฅ mรคngder data med servern utan att sidan behรถver uppdateras.

JavaScript รคr ett skriptsprรฅk pรฅ klientsidan. Det kรถrs pรฅ klientsidan av webblรคsare som stรถder JavaManus. JavaSkriptkod fungerar bara i webblรคsare som har JavaSkript aktiverat.

XML รคr fรถrkortningen fรถr Extensible Markup Language. Det anvรคnds fรถr att koda meddelanden i bรฅde mรคnskliga och maskinlรคsbara format. Det รคr som HTML men lรฅter dig skapa dina egna anpassade taggar. Fรถr mer information om XML, se artikeln om XML.

Varfรถr anvรคnda AJAX?

  • Det tillรฅter utvecklingping rika, interaktiva webbapplikationer precis som skrivbordsapplikationer.
  • Validering kan utfรถras nรคr anvรคndaren fyller i ett formulรคr utan att skicka in det. Detta kan uppnรฅs med hjรคlp av automatisk ifyllning. Orden som anvรคndaren skriver in skickas till servern fรถr bearbetning, och servern svarar med nyckelord som matchar det som anvรคndaren angav.
  • Den kan anvรคndas fรถr att fylla i en rullgardinsmeny beroende pรฅ vรคrdet i en annan rullgardinsmeny.
  • Data kan hรคmtas frรฅn servern och endast en viss del av en sida uppdateras utan att hela sidan laddas. Detta รคr mycket anvรคndbart fรถr webbsidedelar som laddar saker som:
    • Tweets
    • Kommentarer
    • Anvรคndare som besรถker webbplatsen och liknande livedata.

Hur man skapar en PHP Ajax-applikation

Vi kommer att skapa en enkel applikation som lรฅter anvรคndare sรถka efter populรคra PHP MVC-ramverk.

Vรฅr applikation kommer att ha en textruta dรคr anvรคndare skriver in namnen pรฅ ramverken.

Vi anvรคnder sedan AJAX fรถr att sรถka efter en matchning och visar sedan ramverkets fullstรคndiga namn precis under sรถkformulรคret.

Steg 1) Skapa indexsidan

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>

Hร„R,

  • "onkeyup="showName(this.value)"" kรถr JavaSkriptfunktionen showName varje gรฅng en tangent skrivs i textrutan. Den hรคr funktionen kallas autokomplettering.

Steg 2) Skapa ramverkssidan

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;

?>

Steg 3) Skapa JS-skriptet

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();

}

Hร„R,

  • "if (str.length == 0)" kontrollerar strรคngens lรคngd. Om den รคr 0, kรถrs inte resten av skriptet.
  • โ€if (window.XMLHttpRequest)โ€ฆโ€ Internet Explorer version 5 och 6 anvรคnder ActiveXObject fรถr AJAX-implementeringen. Andra versioner och webblรคsare som Chrome och Firefox anvรคnd XMLHttpRequest. Denna kod sรคkerstรคller att vรฅr applikation fungerar i bรฅde IE 5 och 6 och moderna webblรคsare.
  • โ€xmlhttp.onreadystatechange=functionโ€ฆโ€ kontrollerar om AJAX-interaktionen รคr klar och statusen รคr 200, och uppdaterar sedan txtName-spannet med de returnerade resultaten.

Steg 4) Testar vรฅr PHP Ajax-applikation

Om du har sparat filen index.php i phptuts/ajax, blรคddra till URL http://localhost/phptuts/ajax/index.php

Testar vรฅr PHP Ajax-applikation

Skriv bokstaven C i textrutan. Du fรฅr fรถljande resultat.

Testar vรฅr PHP Ajax-applikation

Exemplet ovan visar konceptet AJAX och hur det kan hjรคlpa oss att skapa rika, interaktiva applikationer.

Modern AJAX med Fetch API

XMLHttpRequest-objektet ovan fungerar fortfarande, men dess ActiveXObject-gren fรถr gamla Internet Explorer behรถvs inte lรคngre. Moderna webblรคsare tillhandahรฅller det promise-baserade Fetch API:et, vilket gรถr samma begรคran med betydligt mindre kod.

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;
        });
}

Den hรคr versionen gรถr samma jobb: den skickar den inskrivna texten till frameworks.php och placerar svaret i txtName-spannet. Den anvรคnder ocksรฅ encodeURIComponent fรถr att sรคkert undvika inmatningen, och dess lรถfteskedja รคr enkel att utรถka med felhantering med hjรคlp av ett catch-block.

Vanliga frรฅgor

En synkron begรคran blockerar webblรคsaren tills servern svarar, vilket fryser sidan. En asynkron begรคran kรถrs i bakgrunden, sรฅ sidan fรถrblir responsiv och uppdateras nรคr data anlรคnder. Ajax anvรคnder den asynkrona modellen.

Med fetch, skicka en andra argumentinstรคllningsmetod till POST och en brรถdtext, lรคs sedan $_POST i PHP. Med XMLHttpRequest, anropa open('POST', url), ange Content-Type-headern och skicka den kodade datan.

CORS, Cross-Origin Resource Sharing, blockerar webblรคsarfรถrfrรฅgningar till en annan domรคn om inte den servern skickar rรคtt Access-Control-Allow-Origin-header. Lรคgg till headern pรฅ PHP-sidan eller anropa en same-origin-header. URL att fixa det.

Ja. Klistra in XMLHttpRequest-koden, sรฅ kan AI skriva om den med hjรคlp av det promise-baserade hรคmtnings-API:et eller axios, lรคgga till felhantering och behรฅlla samma beteende. Testa resultatet, eftersom svarshanteringen skiljer sig nรฅgot.

Ja. Dela fรถrfrรฅgningskoden och webblรคsarkonsolen eller nรคtverksfelet, sรฅ kan AI upptรคcka ett felaktigt fel. URL, ett CORS-block, en saknad parameter eller ett serverfel, och fรถreslรฅ sedan en lรถsning att prova.

Sammanfatta detta inlรคgg med: