In traditional web development, every form submission or data search forces the web browser to refresh the entire page, causing jarring screen flickers and wasted bandwidth. AJAX (Asynchronous JavaScript and XML) solves this by allowing JavaScript running in the browser to communicate with a background PHP server script silently. The page updates dynamic elements in real-time without reloading.
Here is a complete, working live-search implementation using modern JavaScript fetch() communicating with a PHP backend:
<!-- search_ui.html -->
<div style="max-width: 500px; margin: 20px 0;">
<label>Live Student Search:</label>
<input type="text" id="searchBox" placeholder="Type a student name..." class="form-control" onkeyup="liveSearch(this.value)">
<div id="searchResults" style="margin-top: 10px; border: 1px solid #cbd5e1; display: none; background: #fff;"></div>
</div>
<script>
function liveSearch(query) {
if (query.trim().length === 0) {
document.getElementById("searchResults").style.display = "none";
return;
}
// Send asynchronous AJAX request to backend PHP script
fetch("search_backend.php?q=" + encodeURIComponent(query))
.then(response => response.json())
.then(data => {
let container = document.getElementById("searchResults");
container.innerHTML = "";
container.style.display = "block";
if (data.length === 0) {
container.innerHTML = "<p style='padding:10px;'>No students found.</p>";
return;
}
let listHtml = "<ul style='list-style:none; padding:10px; margin:0;'>";
data.forEach(item => {
listHtml += "<li style='padding:5px 0;'><b>" + item.name + "</b> (" + item.course + ")</li>";
});
listHtml += "</ul>";
container.innerHTML = listHtml;
});
}
</script>
search_backend.php<?php
header("Content-Type: application/json; charset=UTF-8");
$query = trim($_GET['q'] ?? '');
if ($query === '') {
echo json_encode([]);
exit();
}
// Mock dataset (In production, query via PDO prepared statement)
$students = [
["name" => "Vikram Aditya", "course" => "BCA Semester IV"],
["name" => "Anjali Sharma", "course" => "B.Tech Computer Science"],
["name" => "Deepak Verma", "course" => "BSc IT"],
["name" => "Priya Patel", "course" => "MCA"]
];
$results = [];
foreach ($students as $s) {
// Case-insensitive substring match
if (stripos($s['name'], $query) !== false) {
$results[] = $s;
}
}
// Return matching rows as JSON to the frontend JavaScript
echo json_encode($results);
?>
High-Frequency Exam Question:
Q: How does AJAX improve Core Web Vitals and user experience?
A: AJAX eliminates full-page roundtrips, reducing server network payload transfer by over 90% (transferring only raw JSON rather than redundant HTML/CSS assets). This improves Largest Contentful Paint (LCP) and provides app-like responsiveness.
Exercise 43.1: Build an AJAX username availability checker that tells the user "Username Available" or "Username Taken" in real time as they type in a form field.
Exercise 43.2: Implement an AJAX-powered like button that updates a post counter without reloading the page.