JS AJAX डेटाबेस
In this page:
AJAX से Database Data Fetch करना
एक read-only AJAX endpoint एक database query चलाता है और matching rows को JSON के रूप में return करता है -- JavaScript side बस उस JSON को fetch और parse करता है, बिना SQL, tables, या शामिल database engine की किसी जानकारी के।
उदाहरण: Fetching Database Data via AJAX
fetch("get-users.php")
.then(response => response.json())
.then(rows => console.log(rows)); // JS just parses JSON, no SQL knowledge needed
AJAX से Database में Data Save करना
एक write AJAX endpoint submitted data को पढ़ता है, उसे validate करता है, और server side पर एक prepared statement इस्तेमाल करके उसे database में insert या update करता है -- JavaScript side request भेजता है और एक confirmation वापस पढ़ता है, हुई database operation की किसी सीधी जानकारी के बिना।
उदाहरण: Saving Data to a Database via AJAX
// Send a POST request with a JSON body to save-user.php
fetch("save-user.php", {
method: "POST",
headers: { "Content-Type": "application/json" }, // tell the server we're sending JSON
body: JSON.stringify({ name: "Sam" }), // convert the JS object into a JSON string
}).then(r => r.json()).then(confirmation => console.log(confirmation)); // parse and log the server's JSON reply
Server-Side Filtering, Sorting, और Pagination
किसी भी काफी बड़े dataset के लिए, filtering, sorting, और pagination server की database query में होनी चाहिए, हर row fetch करके उसे JavaScript में process करने से नहीं -- client अपने चाहे filters को query parameters के रूप में भेजता है, और server का SQL WHERE/ORDER BY/LIMIT असली काम करता है।
उदाहरण: Server-Side Filtering, Sorting, and Pagination
const page = 2, sortBy = "name";
fetch(`get-users.php?page=${page}&sort=${sortBy}`)
.then(r => r.json())
.then(rows => console.log(rows)); // filtering/sorting done server-side
Loading और Empty States संभालना
एक database-backed AJAX request में एक ध्यान देने लायक पल लग सकता है, और यह zero matching rows भी return कर सकती है -- एक polished UI इंतज़ार के दौरान एक loading indicator दिखाता है, और response में एक खाली array होने पर एक blank area के बजाय एक साफ "no results" message दिखाता है।
उदाहरण: Handling Loading and Empty States
// Assign "<p>Loading...</p>" to `document.body.innerHTML`
// Assign "<p>Loading...</p>" to `document.body.innerHTML`
document.body.innerHTML = "<p>Loading...</p>";
// Define the method `fetch` taking `"get-users.php"`
// Define the method `fetch` taking `"get-users.php"`
fetch("get-users.php")
// On success, run this with the resolved value as `r`
// On success, run this with the resolved value as `r`
.then(r => r.json())
// On success, run this with the resolved value as `rows`
// On success, run this with the resolved value as `rows`
.then(rows => {
// Assign `rows.length ? JSON.stringify(rows) : "<p>No results</p>"` to `document.body.innerHTML`
// Assign `rows.length ? JSON.stringify(rows) : "<p>No results</p>"` to `document.body.innerHTML`
document.body.innerHTML = rows.length ? JSON.stringify(rows) : "<p>No results</p>";
});
Database-Backed Endpoints के लिए Error Handling
एक database query client के control से पूरी तरह बाहर की वजहों से fail हो सकती है -- एक connection समस्या, एक constraint violation -- और server को इन्हें catch करना चाहिए, असली detail log करनी चाहिए, और एक generic, safe error message return करनी चाहिए जिसे JavaScript user को internal database details दिखाए बिना display करे।
उदाहरण: Error Handling for Database-Backed Endpoints
fetch("get-users.php")
.then(response => {
if (!response.ok) throw new Error("Something went wrong");
return response.json();
})
.then(rows => console.log(rows))
.catch(() => console.log("Unable to load data right now")); // no internal DB details exposed
- server पर AJAX-submitted values को सीधे SQL में concatenate करके database queries बनाना, बिल्कुल किसी दूसरे untrusted input जितने ही SQL injection risk के साथ।
- सिर्फ एक filtered, paginated slice चाहिए होने पर AJAX से एक पूरा बड़ा dataset fetch करना, bandwidth बर्बाद करते हुए और response धीमा करते हुए।
- किसी database-backed AJAX request का इंतज़ार करते हुए (या उससे एक empty result मिलने के बाद) JavaScript UI में loading और empty states handle न करना।
- एक database-backed AJAX endpoint एक query चलाता है (किसी भी user-supplied value के लिए prepared statements इस्तेमाल करते हुए) और result को JSON की तरह return करता है।
- client-side JavaScript को database के बारे में बिल्कुल पता नहीं होता -- यह सिर्फ वह JSON response देखता है जो server भेजना चुनता है।
- Filtering, sorting, और pagination आमतौर पर server side पर database query के ज़रिए handle किए जाते हैं, सब कुछ fetch करके JavaScript में process करने के बजाय।
Database-backed AJAX endpoints server-side language या database engine चाहे जो भी हो समान रूप से काम करते हैं, क्योंकि browser सिर्फ final HTTP response देखता है।
Chapter Quiz — Complete all 26 topics to unlock
0/26 topics done
Complete these topics first:
- JS JSON
- JS Regular Expressions
- JS Fetch API
- JS LocalStorage and SessionStorage
- JS Cookies
- JS setTimeout and setInterval
- JS Event Loop
- JS Web Workers
- JS Service Workers
- JS AJAX
- JS AJAX Intro
- JS AJAX XMLHttp
- JS AJAX Request
- JS AJAX Response
- JS AJAX XML
- JS AJAX PHP
- JS AJAX Database
- JS JSONP
- JS RegExp Flags
- JS RegExp Classes
- JS RegExp Metachars
- JS RegExp Assertions
- JS RegExp Groups
- JS RegExp Quantifiers
- JS JSON HTML
- JS JSON vs XML