Fetch/XMLHttpRequest in JavaScript
Dit artikel legt Fetch/XMLHttpRequest in JavaScript uit.
YouTube Video
javascript-html-fetch-xhr.html
1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="UTF-8">
5 <title>JavaScript & HTML</title>
6 <style>
7 * {
8 box-sizing: border-box;
9 }
10
11 body {
12 margin: 0;
13 padding: 1em;
14 padding-bottom: 10em;
15 font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
16 background-color: #f7f9fc;
17 color: #333;
18 line-height: 1.6;
19 }
20
21 .container {
22 max-width: 800px;
23 margin: 0 auto;
24 padding: 1em;
25 background-color: #ffffff;
26 border: 1px solid #ccc;
27 border-radius: 10px;
28 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
29 }
30
31 .container-flex {
32 display: flex;
33 flex-wrap: wrap;
34 gap: 2em;
35 max-width: 1000px;
36 margin: 0 auto;
37 padding: 1em;
38 background-color: #ffffff;
39 border: 1px solid #ccc;
40 border-radius: 10px;
41 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
42 }
43
44 .left-column, .right-column {
45 flex: 1 1 200px;
46 min-width: 200px;
47 }
48
49 h1, h2 {
50 font-size: 1.2rem;
51 color: #007bff;
52 margin-top: 0.5em;
53 margin-bottom: 0.5em;
54 border-left: 5px solid #007bff;
55 padding-left: 0.6em;
56 background-color: #e9f2ff;
57 }
58
59 button {
60 display: block;
61 margin: 1em auto;
62 padding: 0.75em 1.5em;
63 font-size: 1rem;
64 background-color: #007bff;
65 color: white;
66 border: none;
67 border-radius: 6px;
68 cursor: pointer;
69 transition: background-color 0.3s ease;
70 }
71
72 button:hover {
73 background-color: #0056b3;
74 }
75
76 #output {
77 margin-top: 1em;
78 background-color: #1e1e1e;
79 color: #0f0;
80 padding: 1em;
81 border-radius: 8px;
82 min-height: 200px;
83 font-family: Consolas, monospace;
84 font-size: 0.95rem;
85 overflow-y: auto;
86 white-space: pre-wrap;
87 }
88
89 .highlight {
90 outline: 3px solid #ffc107; /* yellow border */
91 background-color: #fff8e1; /* soft yellow background */
92 transition: background-color 0.3s ease, outline 0.3s ease;
93 }
94
95 .active {
96 background-color: #28a745; /* green background */
97 color: #fff;
98 box-shadow: 0 0 10px rgba(40, 167, 69, 0.5);
99 transition: background-color 0.3s ease, box-shadow 0.3s ease;
100 }
101 </style>
102</head>
103<body>
104 <div class="container">
105 <h1>JavaScript Console</h1>
106 <button id="executeBtn">Execute</button>
107 <div id="output"></div>
108 </div>
109
110 <script>
111 // Override console.log to display messages in the #output element
112 (function () {
113 // Override console.log
114 const originalLog = console.log;
115 console.log = function (...args) {
116 originalLog.apply(console, args);
117 const message = document.createElement('div');
118 message.textContent = args.map(String).join(' ');
119 output.appendChild(message);
120 };
121
122 // Override console.error
123 const originalError = console.error;
124 console.error = function (...args) {
125 originalError.apply(console, args);
126 const message = document.createElement('div');
127 message.textContent = args.map(String).join(' ');
128 message.style.color = 'red'; // Color error messages red
129 output.appendChild(message);
130 };
131 })();
132
133 document.getElementById('executeBtn').addEventListener('click', () => {
134 // Prevent multiple loads
135 if (document.getElementById('externalScript')) return;
136
137 const script = document.createElement('script');
138 script.src = 'javascript-html-fetch-xhr.js';
139 script.id = 'externalScript';
140 //script.onload = () => console.log('javascript-html-fetch-xhr.js loaded and executed.');
141 //script.onerror = () => console.log('Failed to load javascript-html-fetch-xhr.js.');
142 document.body.appendChild(script);
143 });
144 </script>
145</body>
146</html>
Fetch/XMLHttpRequest in JavaScript
Fetch
en XMLHttpRequest
(XHR) in JavaScript worden beide gebruikt om HTTP-verzoeken te verzenden en gegevens van een server op te halen.
Fetch API
De Fetch API
is een moderne methode voor het afhandelen van HTTP-verzoeken en is ontworpen als opvolger van XHR. Het is een asynchrone API die is gebaseerd op Promises, waarmee eenvoudigere en flexibelere verwerking van verzoeken mogelijk is.
Gebruik
1fetch('http://127.0.0.1:3000/example.json')
2 .then((response) => {
3 if (!response.ok) {
4 throw new Error('HTTP error: ' + response.status);
5 }
6 return response.json(); // Parse the response as JSON
7 })
8 .then((data) => {
9 console.log(data); // Use the fetched data
10 console.log(JSON.stringify(data));
11 })
12 .catch((error) => {
13 console.error('An error occurred:', error); // Error handling
14 });
- Deze code stuurt een GET-verzoek naar de opgegeven URL met behulp van de
Fetch API
, verwerkt het antwoord als JSON en toont het resultaat of geeft een foutmelding weer.
Kenmerken
De Fetch API
heeft de volgende kenmerken:.
- Gebaseerd op Promises Asynchrone operaties kunnen met Promises beheerd worden, waardoor de code overzichtelijker en makkelijker leesbaar wordt.
- Eenvoudige foutafhandeling
Fouten kunnen eenvoudig worden afgehandeld met behulp van het
catch
-blok. - Parsen met methoden zoals
response.json()
Responsgegevens kunnen eenvoudig verwerkt worden in JSON- of tekstformaat. - Ondersteuning voor CORS
Fetch
werkt op basis van Cross-Origin Resource Sharing (CORS)-regels. - Flexibele configuratie van aanvragen Niet alleen GET/POST, maar ook HTTP-methoden zoals PUT en DELETE kunnen eenvoudig geconfigureerd worden.
Voorbeeld: POST-verzoek
1fetch('http://127.0.0.1:3000/example.json', {
2 method: 'POST',
3 headers: {
4 'Content-Type': 'application/json'
5 },
6 body: JSON.stringify({ name: 'Alice', age: 25 }) // Send the request body as JSON
7 })
8 .then(response => response.json())
9 .then(data => console.log(JSON.stringify(data)))
10 .catch(error => console.error('Error:', error));
- Deze code stuurt een POST-verzoek met JSON-gegevens en ontvangt en toont het antwoord van de server als JSON.
Nadelen
De Fetch API
heeft de volgende nadelen:.
- Browsercompatibiliteit
Oudere browsers (vooral IE11) ondersteunen de
Fetch API
niet. - Moeilijk om fijnmazige controle uit te voeren In vergelijking met XHR is het niet geschikt voor laag-niveau controles zoals het afhandelen van voortgangsevenementen.
XMLHttpRequest
(XHR)
XMLHttpRequest
is een API die al lang wordt gebruikt om HTTP-verzoeken te verwerken en die veel wordt gebruikt als basis voor AJAX (Asynchronous JavaScript and XML). Maakt asynchrone communicatie mogelijk, waardoor gegevens van de server kunnen worden opgehaald zonder de hele pagina te herladen.
Gebruik
1const xhr = new XMLHttpRequest();
2xhr.open('GET', 'http://127.0.0.1:3000/example.json', true);
3xhr.onreadystatechange = function() {
4 if (xhr.readyState === 4 && xhr.status === 200) {
5 const data = JSON.parse(xhr.responseText); // Parse the response as JSON
6 console.log(data); // Use the data
7 console.log(JSON.stringify(data));
8 }
9};
10xhr.send(); // Send the request
- Deze code stuurt een GET-verzoek met behulp van
XMLHttpRequest
, parseert de ontvangen JSON-respons en toont deze.
Kenmerken
XMLHttpRequest
heeft de volgende kenmerken:.
- Gebaseerd op callbacks
Callbackfuncties zoals
onreadystatechange
worden gebruikt om de voltooiing of voortgang van het verzoek te monitoren. - Statuscodes en ready states controleren
De status van het verzoek kan worden gecontroleerd met
xhr.readyState
enxhr.status
. - Brede compatibiliteit Werkt zelfs op oudere browsers.
- Verzoekvoortgang monitoren
Voortgang kan worden gemonitord met behulp van evenementen zoals
xhr.upload.onprogress
.
Voorbeeld: POST-verzoek
1const xhr = new XMLHttpRequest();
2xhr.open('POST', 'http://127.0.0.1:3000/example.json', true);
3xhr.setRequestHeader('Content-Type', 'application/json');
4xhr.onreadystatechange = function() {
5 if (xhr.readyState === 4 && xhr.status === 200) {
6 const data = JSON.parse(xhr.responseText);
7 console.log(data);
8 console.log(JSON.stringify(data));
9 }
10};
11xhr.send(JSON.stringify({ name: 'Alice', age: 25 })); // Send the data
- Deze code stuurt een POST-verzoek met JSON-gegevens via
XMLHttpRequest
, ontvangt het antwoord en toont het.
Nadelen
XMLHttpRequest
heeft de volgende nadelen:.
- Codecomplexiteit Het beheren van asynchrone verwerking met callbackfuncties is vaak complex.
- Geen native Promise-ondersteuning Omdat Promises standaard niet ondersteund worden, wordt asynchrone verwerking enigszins omslachtig.
Vergelijking tussen Fetch API
en XMLHttpRequest
Kenmerken | Fetch API |
XMLHttpRequest (XHR) |
---|---|---|
Asynchrone verwerking | Eenvoudig met Promises | Vereist callback-functies |
Foutafhandeling | Beheerbaar met .catch() |
Controleer de readyState -status |
Voortgangsevenementen | Niet ondersteund | Behandeld met onprogress |
Ondersteuning voor cross-origin | Ondersteunt automatisch CORS | Ondersteunt CORS |
Browserondersteuning | Niet ondersteund in IE11 en ouder | Compatibel met oudere browsers |
Controleprecisie | Eenvoudig en intuïtief | Biedt gedetailleerde controle |
Samenvatting
- De Fetch API biedt eenvoudige en flexibele HTTP-verzoeken op basis van Promises en wordt aanbevolen in moderne browsers.
Je kunt het bovenstaande artikel volgen met Visual Studio Code op ons YouTube-kanaal. Bekijk ook het YouTube-kanaal.