Fetch/XMLHttpRequest dalam JavaScript
Artikel ini menjelaskan Fetch/XMLHttpRequest dalam JavaScript.
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 dalam JavaScript
Fetch
dan XMLHttpRequest
(XHR) dalam JavaScript keduanya digunakan untuk mengirim permintaan HTTP dan mengambil data dari server.
Fetch API
Fetch API
adalah metode modern untuk menangani permintaan HTTP, dirancang sebagai penerus XHR. Ini adalah API asinkron berbasis Promises, memungkinkan penanganan permintaan yang lebih sederhana dan fleksibel.
Penggunaan
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 });
- Kode ini mengirim permintaan GET ke URL yang ditentukan menggunakan
Fetch API
, memproses respons sebagai JSON, dan menampilkan hasilnya atau memunculkan error.
Fitur
Fetch API
memiliki fitur-fitur berikut:.
- Berdasarkan Promise Operasi asinkron dapat dikelola dengan Promise, sehingga kode menjadi lebih bersih dan mudah dibaca.
- Penanganan error yang mudah
Error dapat ditangani dengan mudah menggunakan blok
catch
. - Parsing dengan metode seperti
response.json()
Data respons dapat dengan mudah diproses dalam format JSON atau teks. - Dukungan CORS
Fetch
bekerja berdasarkan aturan Cross-Origin Resource Sharing (CORS). - Konfigurasi permintaan yang fleksibel Tidak hanya GET/POST, tetapi juga metode HTTP seperti PUT dan DELETE dapat dengan mudah dikonfigurasi.
Contoh: Permintaan POST
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));
- Kode ini mengirim permintaan POST yang berisi data JSON dan menerima serta menampilkan respons dari server sebagai JSON.
Kekurangan
Fetch API
memiliki kekurangan berikut:.
- Kompatibilitas browser
Browser lama (terutama IE11) tidak mendukung
Fetch API
. - Sulit untuk melakukan kontrol tingkat rendah Dibandingkan dengan XHR, ini tidak cocok untuk kontrol tingkat rendah seperti penanganan event kemajuan.
XMLHttpRequest
(XHR)
XMLHttpRequest
adalah API yang sudah lama digunakan untuk menangani permintaan HTTP dan secara luas digunakan sebagai dasar untuk AJAX (Asynchronous JavaScript dan XML). Memungkinkan komunikasi asinkron, sehingga data dapat diambil dari server tanpa memuat ulang seluruh halaman.
Penggunaan
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
- Kode ini mengirim permintaan GET menggunakan
XMLHttpRequest
, mengurai respons JSON yang diterima, dan menampilkannya.
Fitur
XMLHttpRequest
memiliki fitur-fitur berikut:.
- Berdasarkan Callback
Fungsi callback seperti
onreadystatechange
digunakan untuk memonitor penyelesaian atau kemajuan permintaan. - Memantau kode status dan status siap
Status permintaan dapat diperiksa menggunakan
xhr.readyState
danxhr.status
. - Kompatibilitas luas Berfungsi bahkan di browser lama.
- Memantau kemajuan permintaan
Kemajuan dapat dipantau menggunakan event seperti
xhr.upload.onprogress
.
Contoh: Permintaan POST
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
- Kode ini mengirim permintaan POST dengan data JSON menggunakan
XMLHttpRequest
, menerima respons, dan menampilkannya.
Kekurangan
XMLHttpRequest
memiliki kekurangan berikut:.
- Kompleksitas kode Mengelola pemrosesan asinkron dengan fungsi callback cenderung kompleks.
- Tidak ada dukungan Promise secara native Karena Promise tidak didukung secara default, pemrosesan asinkron menjadi agak berbelit-belit.
Perbandingan antara Fetch API
dan XMLHttpRequest
Fitur | Fetch API |
XMLHttpRequest (XHR) |
---|---|---|
Pemrosesan asinkron | Sederhana dengan Promises | Membutuhkan fungsi callback |
Penanganan error | Dapat ditangani dengan .catch() |
Memeriksa status readyState |
Event progres | Tidak didukung | Ditangani dengan onprogress |
Dukungan lintas asal (CORS) | Secara otomatis mendukung CORS | Mendukung CORS |
Dukungan browser | Tidak didukung di IE11 dan versi lama | Kompatibel dengan browser lama |
Granularitas kontrol | Sederhana dan intuitif | Memungkinkan kontrol mendetail |
Ringkasan
- Fetch API menyediakan permintaan HTTP yang sederhana dan fleksibel berbasis Promise dan direkomendasikan untuk browser modern.
Anda dapat mengikuti artikel di atas menggunakan Visual Studio Code di saluran YouTube kami. Silakan periksa juga saluran YouTube kami.