Fetch/XMLHttpRequest sa JavaScript
Ipinaliliwanag ng artikulong ito ang Fetch/XMLHttpRequest sa 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 sa JavaScript
Ang Fetch
at XMLHttpRequest
(XHR) sa JavaScript ay parehong ginagamit para sa pagpapadala ng mga HTTP request at pagkuha ng datos mula sa server.
Fetch API
Ang Fetch API
ay isang modernong paraan ng paghawak ng mga HTTP request, na idinisenyo bilang kahalili ng XHR. Ito ay isang asynchronous na API batay sa Promises, na nagbibigay-daan para sa mas simple at mas flexible na paghawak ng mga request.
Paggamit
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 });
- Ang code na ito ay nagpapadala ng GET request sa tinukoy na URL gamit ang
Fetch API
, pinoproseso ang sagot bilang JSON, at ipinapakita ang resulta o naglalabas ng error.
Mga Tampok
Ang Fetch API
ay may mga sumusunod na katangian:.
- Batay sa Promise Ang mga asynchronous na operasyon ay maaaring pamahalaan gamit ang Promises, na ginagawang mas malinis at madaling basahin ang code.
- Madaling paghawak ng error
Ang mga error ay madaling mahawakan gamit ang
catch
block. - Pag-parse gamit ang mga method tulad ng
response.json()
Ang response data ay madaling maproseso sa format na JSON o text. - Suporta sa CORS
Ang
Fetch
ay gumagana base sa mga patakaran ng Cross-Origin Resource Sharing (CORS). - Flexible na pag-configure ng request Hindi lang GET/POST, kundi pati mga HTTP method tulad ng PUT at DELETE ay madaling ma-configure.
Halimbawa: POST Request
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));
- Ang code na ito ay nagpapadala ng POST request na may kasamang JSON data at tumatanggap at nagpapakita ng sagot mula sa server bilang JSON.
Mga Kakulangan
Ang Fetch API
ay may mga sumusunod na kahinaan:.
- Pagkakatugma sa browser
Ang mga lumang browser (lalo na ang IE11) ay hindi sumusuporta sa
Fetch API
. - Mahirap isagawa ang mas detalyadong kontrol Kumpara sa XHR, hindi ito angkop para sa low-level na kontrol tulad ng paghawak ng progress events.
XMLHttpRequest
(XHR)
Ang XMLHttpRequest
ay isang API na matagal nang ginagamit sa paghawak ng mga HTTP request at madalas na ginagamit bilang batayan para sa AJAX (Asynchronous JavaScript at XML). Nagbibigay-daan sa asynchronous na komunikasyon, na nagpapahintulot sa pagkuha ng datos mula sa server nang hindi nire-reload ang buong pahina.
Paggamit
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
- Ang code na ito ay nagpapadala ng GET request gamit ang
XMLHttpRequest
, ipinaparse ang natanggap na JSON response, at ipinapakita ito.
Mga Tampok
Ang XMLHttpRequest
ay may mga sumusunod na katangian:.
- Batay sa Callback
Ang mga callback function tulad ng
onreadystatechange
ay ginagamit upang subaybayan ang pagkumpleto o progreso ng request. - Pagsubaybay ng status codes at ready states
Ang status ng request ay maaaring tingnan gamit ang
xhr.readyState
atxhr.status
. - Malawak na pagkakatugma Gumagana kahit sa mga lumang browser.
- Subaybayan ang progreso ng request
Ang progreso ay maaaring subaybayan gamit ang mga event tulad ng
xhr.upload.onprogress
.
Halimbawa: POST Request
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
- Ang code na ito ay nagpapadala ng POST request na may JSON data gamit ang
XMLHttpRequest
, tumatanggap ng response, at ipinapakita ito.
Mga Kakulangan
Ang XMLHttpRequest
ay may mga sumusunod na kahinaan:.
- Kompleksidad ng code Ang pamamahala ng asynchronous processing gamit ang callback functions ay nagiging kumplikado.
- Walang native na suporta sa Promise Dahil hindi suportado ng default ang Promises, ang asynchronous processing ay nagiging mas mahaba o matrabaho.
Paghahambing sa pagitan ng Fetch API
at XMLHttpRequest
Mga Tampok | Fetch API |
XMLHttpRequest (XHR) |
---|---|---|
Asynchronous na pagpoproseso | Simple gamit ang Promises | Nangangailangan ng callback functions |
Pag-aasikaso ng mga error | Madaling pamahalaan gamit ang .catch() |
Suriin ang readyState status |
Mga progress event | Hindi sinusuportahan | Pinangangasiwaan gamit ang onprogress |
Suporta para sa cross-origin | Awtomatikong sumusuporta sa CORS | Sumusuporta sa CORS |
Suporta ng browser | Hindi sinusuportahan sa IE11 at mas luma | Tugma sa mas lumang mga browser |
Detalyado sa kontrol | Simple at madaling intindihin | Pinapayagan ang detalyadong kontrol |
Buod
- Ang Fetch API ay nagbibigay ng simple at nababagong HTTP requests na nakabatay sa Promises at inirerekomenda sa makabagong mga browser.
Maaari mong sundan ang artikulo sa itaas gamit ang Visual Studio Code sa aming YouTube channel. Paki-check din ang aming YouTube channel.