Menggunakan fungsi fetch() di JavaScript memungkinkan Anda mengambil dokumen HTML dari URL lain secara asinkron tanpa harus memuat ulang halaman utama. Metode standar modern ini memanfaatkan Promise untuk melakukan permintaan HTTP GET dan memproses respons yang diterima menjadi teks HTML siap parsing.
Untuk mengambil konten HTML secara utuh, respons dari server perlu diubah dari objek Response menjadi string teks menggunakan metode .text(). Setelah teks HTML didapat, Anda bisa menyisipkannya langsung ke dalam elemen DOM atau mem-parsingnya menggunakan DOMParser untuk menyeleksi elemen tertentu.
Sintaks Dasar Fetch HTML
Berikut adalah struktur kode dasar untuk mengambil dan menampilkan halaman HTML menggunakan fetch():
fetch('https://example.com/halaman.html')
.then(response => {
if (!response.ok) {
throw new Error('Gagal memuat halaman: ' + response.statusText);
}
return response.text();
})
.then(htmlText => {
console.log(htmlText);
// Masukkan ke dalam elemen DOM
document.getElementById('konten-target').innerHTML = htmlText;
})
.catch(error => {
console.error('Terjadi kesalahan:', error);
});
Menggunakan Async/Await untuk Kode yang Lebih Bersih
Pendekatan modern sering kali menggunakan sintaks async/await agar alur kode terbaca lebih runtut dan mudah dikelola, terutama saat menangani error:
async function ambilHalamanHTML(url) {
try {
let response = await fetch(url);
if (!response.ok) {
throw new Error(`HTTP error! Status: ${response.status}`);
}
let htmlString = await response.text();
// Parsing string HTML menjadi objek dokumen
let parser = new DOMParser();
let doc = DOMParser.parseFromString(htmlString, 'text/html');
// Ambil judul dari halaman yang di-fetch
let judulTarget = doc.querySelector('h1').innerText;
console.log('Judul halaman target:', judulTarget);
} catch (error) {
console.error('Gagal melakukan fetch:', error);
}
}
ambilHalamanHTML('https://example.com');
Tabel Perbandingan Metode Pengambilan Data Web
| Fitur / Metode | fetch() API | XMLHttpRequest (XHR) | jQuery.ajax() |
|---|---|---|---|
| Standar Bawaan | Native (Browser Modern) | Native (Legacy) | Butuh Pustaka Eksternal |
| Dukungan Promise | Ya (Native) | Tidak (Butuh pembungkus) | Ya |
| Sintaks | Ringkas & Modern | Panjang & Verbose | Sedang |
| Penanganan Stream | Didukung | Terbatas | Terbatas |
Langkah-Langkah Teknis Implementasi
- Pastikan Kebijakan CORS: Periksa apakah server tujuan mengizinkan akses lintas domain (Cross-Origin Resource Sharing). Jika diblokir oleh kebijakan CORS browser, Anda memerlukan proksi atau mengatur header di sisi server tujuan.
- Panggil Fungsi Fetch: Masukkan URL target yang valid menggunakan protokol HTTPS.
- Ubah Respons ke Teks: Jalankan metode
.text()pada objek respons untuk mendapatkan format string HTML mentah. - Parsing dan Manipulasi DOM: Gunakan
DOMParserjika Anda hanya ingin mengambil bagian tertentu dari HTML tersebut (misalnya hanya mengambil elemen<article>atau<table>).
Troubleshooting Masalah Umum
Kendala paling sering saat memakai fetch() untuk mengambil HTML adalah kemunculan error CORS policy di konsol browser. Hal ini terjadi karena browser membatasi skrip agar tidak sembarangan mengambil data dari domain berbeda demi keamanan. Solusi terbaik untuk pengembangan lokal adalah menjalankan server lokal atau melakukan fetch melalui backend server Anda sendiri sebagai perantara.