Bagaimana saya bisa mendapatkan data dari situs web lain di html?

Tugas lain yang sangat umum di situs web dan aplikasi modern adalah mengambil item data individual dari server untuk memperbarui bagian halaman web tanpa harus memuat seluruh halaman baru. Detail yang tampaknya kecil ini berdampak besar pada kinerja dan perilaku situs, jadi dalam artikel ini, kami akan menjelaskan konsep dan melihat teknologi yang memungkinkan. khususnya, Fetch API

Prasyarat. Dasar-dasar JavaScript (lihat langkah pertama, blok penyusun, objek JavaScript), dasar-dasar Client-side APIsObjective. Untuk mempelajari cara mengambil data dari server dan menggunakannya untuk memperbarui konten halaman web

Halaman web terdiri dari halaman HTML dan (biasanya) berbagai file lain, seperti stylesheet, skrip, dan gambar. Model dasar pemuatan halaman di Web adalah browser Anda membuat satu atau lebih permintaan HTTP ke server untuk file yang diperlukan untuk menampilkan halaman, dan server merespons dengan file yang diminta. Jika Anda mengunjungi halaman lain, browser meminta file baru, dan server meresponsnya

Model ini bekerja dengan sangat baik untuk banyak situs. Tetapi pertimbangkan situs web yang sangat digerakkan oleh data. Misalnya, situs web perpustakaan seperti Perpustakaan Umum Vancouver. Antara lain Anda bisa memikirkan situs seperti ini sebagai antarmuka pengguna ke database. Itu mungkin membiarkan Anda mencari genre buku tertentu, atau mungkin menunjukkan rekomendasi untuk buku yang mungkin Anda sukai, berdasarkan buku yang Anda pinjam sebelumnya. Saat Anda melakukan ini, perlu memperbarui halaman dengan kumpulan buku baru untuk ditampilkan. Tetapi perhatikan bahwa sebagian besar konten halaman — termasuk item seperti header halaman, sidebar, dan footer — tetap sama

Masalah dengan model tradisional di sini adalah kita harus mengambil dan memuat seluruh halaman, meskipun kita hanya perlu memperbarui satu bagian saja. Ini tidak efisien dan dapat mengakibatkan pengalaman pengguna yang buruk

Jadi, alih-alih model tradisional, banyak situs web menggunakan API JavaScript untuk meminta data dari server dan memperbarui konten halaman tanpa memuat halaman. Jadi, saat pengguna mencari produk baru, browser hanya meminta data yang diperlukan untuk memperbarui halaman — kumpulan buku baru yang akan ditampilkan, misalnya

API utama di sini adalah Fetch API. Ini memungkinkan JavaScript berjalan di halaman untuk membuat permintaan HTTP ke server untuk mengambil sumber daya tertentu. Saat server menyediakannya, JavaScript dapat menggunakan data tersebut untuk memperbarui halaman, biasanya dengan menggunakan API manipulasi DOM. Data yang diminta seringkali adalah JSON, yang merupakan format yang bagus untuk mentransfer data terstruktur, tetapi bisa juga berupa HTML atau hanya teks

Ini adalah pola umum untuk situs berbasis data seperti Amazon, YouTube, eBay, dan sebagainya. Dengan model ini

  • Pembaruan halaman jauh lebih cepat dan Anda tidak perlu menunggu halaman disegarkan, artinya situs terasa lebih cepat dan lebih responsif
  • Lebih sedikit data yang diunduh pada setiap pembaruan, yang berarti lebih sedikit bandwidth yang terbuang. Ini mungkin bukan masalah besar pada desktop pada koneksi broadband, tetapi ini adalah masalah besar pada perangkat seluler dan di negara-negara yang tidak memiliki layanan internet cepat di mana-mana.

Catatan. Pada awalnya, teknik umum ini dikenal dengan Asynchronous JavaScript and XML (Ajax), karena cenderung meminta data XML. Ini biasanya tidak terjadi akhir-akhir ini (Anda akan lebih cenderung meminta JSON), tetapi hasilnya tetap sama, dan istilah "Ajax" masih sering digunakan untuk menjelaskan tekniknya.

Untuk lebih mempercepat, beberapa situs juga menyimpan aset dan data di komputer pengguna saat pertama kali diminta, yang berarti bahwa pada kunjungan berikutnya mereka menggunakan versi lokal alih-alih mengunduh salinan baru setiap kali laman dimuat pertama kali. Konten hanya dimuat ulang dari server setelah diperbarui

Mari telusuri beberapa contoh Fetch API

Untuk contoh ini, kami akan meminta data dari beberapa file teks yang berbeda dan menggunakannya untuk mengisi area konten

Serangkaian file ini akan bertindak sebagai basis data palsu kami; . Namun, di sini, kami ingin tetap sederhana dan berkonsentrasi pada bagian sisi klien ini

Untuk memulai contoh ini, buat salinan lokal dari fetch-start. html dan empat file teks — ayat1. txt, ayat2. txt, ayat3. txt, dan ayat4. txt — di direktori baru di komputer Anda. Dalam contoh ini, kami akan mengambil ayat puisi yang berbeda (yang mungkin Anda kenali dengan baik) saat dipilih di menu drop-down

Tepat di dalam elemen <script>, tambahkan kode berikut. Ini menyimpan referensi ke elemen <select> dan

function updateDisplay(verse) {

}
0 dan menambahkan pendengar ke elemen <select>, sehingga ketika pengguna memilih nilai baru, nilai baru diteruskan ke fungsi bernama
function updateDisplay(verse) {

}
2 sebagai parameter

const verseChoose = document.querySelector('select');
const poemDisplay = document.querySelector('pre');

verseChoose.addEventListener('change', () => {
  const verse = verseChoose.value;
  updateDisplay(verse);
});

Mari kita definisikan fungsi

function updateDisplay(verse) {

}
_2 kita. Pertama-tama, letakkan kode berikut di bawah blok kode sebelumnya — ini adalah cangkang kosong dari fungsi

function updateDisplay(verse) {

}

Kami akan memulai fungsi kami dengan membuat URL relatif yang menunjuk ke file teks yang ingin kami muat, karena kami akan membutuhkannya nanti. Nilai elemen <select> setiap saat sama dengan teks di dalam

function updateDisplay(verse) {

}
5 yang dipilih (kecuali jika Anda menentukan nilai yang berbeda dalam atribut nilai) — jadi misalnya "Verse 1". File teks ayat yang sesuai adalah "ayat1. txt", dan berada di direktori yang sama dengan file HTML, oleh karena itu hanya nama file yang akan digunakan

Namun, server web cenderung peka terhadap huruf besar-kecil, dan nama file tidak memiliki spasi di dalamnya. Untuk mengonversi "Ayat 1" menjadi "ayat 1. txt" kita perlu mengonversi V menjadi huruf kecil, menghapus spasi, dan menambahkan. txt di bagian akhir. Ini dapat dilakukan dengan

function updateDisplay(verse) {

}
_6,
function updateDisplay(verse) {

}
7, dan. Tambahkan baris berikut di dalam fungsi
function updateDisplay(verse) {

}
2 Anda

verse = verse.replace(' ', '').toLowerCase();
const url = `${verse}.txt`;
_

Akhirnya kita siap menggunakan Fetch API

// Call `fetch()`, passing in the URL.
fetch(url)
  // fetch() returns a promise. When we have received a response from the server,
  // the promise's `then()` handler is called with the response.
  .then((response) => {
    // Our handler throws an error if the request did not succeed.
    if (!response.ok) {
      throw new Error(`HTTP error: ${response.status}`);
    }
    // Otherwise (if the response succeeded), our handler fetches the response
    // as text by calling response.text(), and immediately returns the promise
    // returned by `response.text()`.
    return response.text();
  })
  // When response.text() has succeeded, the `then()` handler is called with
  // the text, and we copy it into the `poemDisplay` box.
  .then((text) => poemDisplay.textContent = text)
  // Catch any errors that might happen, and display a message
  // in the `poemDisplay` box.
  .catch((error) => poemDisplay.textContent = `Could not fetch verse: ${error}`);

Ada cukup banyak untuk dibongkar di sini

Pertama, titik masuk ke Fetch API adalah fungsi global yang disebut

function updateDisplay(verse) {

}
9, yang menggunakan URL sebagai parameter (dibutuhkan parameter opsional lain untuk setelan khusus, tetapi kami tidak menggunakannya di sini)

Selanjutnya,

function updateDisplay(verse) {

}
_9 adalah API asinkron yang mengembalikan
verse = verse.replace(' ', '').toLowerCase();
const url = `${verse}.txt`;
1. Jika Anda tidak tahu apa itu, baca modul tentang JavaScript asinkron, dan khususnya artikel tentang janji, lalu kembali ke sini. Anda akan menemukan artikel itu juga berbicara tentang
function updateDisplay(verse) {

}
9 API

Jadi karena

function updateDisplay(verse) {

}
_9 mengembalikan sebuah janji, kita meneruskan sebuah fungsi ke dalam metode
verse = verse.replace(' ', '').toLowerCase();
const url = `${verse}.txt`;
4 dari janji yang dikembalikan. Metode ini akan dipanggil ketika permintaan HTTP telah mendapat respon dari server. Di handler, kami memeriksa apakah permintaan berhasil, dan melontarkan kesalahan jika tidak. Jika tidak, kami memanggil
verse = verse.replace(' ', '').toLowerCase();
const url = `${verse}.txt`;
_5, untuk mendapatkan isi respons sebagai teks

Ternyata

verse = verse.replace(' ', '').toLowerCase();
const url = `${verse}.txt`;
_5 juga asinkron, jadi kami mengembalikan janji yang dikembalikannya, dan meneruskan fungsi ke metode
verse = verse.replace(' ', '').toLowerCase();
const url = `${verse}.txt`;
4 dari janji baru ini. Fungsi ini akan dipanggil ketika teks respons siap, dan di dalamnya kami akan memperbarui blok
function updateDisplay(verse) {

}
0 kami dengan teks

Akhirnya, kami merangkai penangan

verse = verse.replace(' ', '').toLowerCase();
const url = `${verse}.txt`;
_9 di bagian akhir, untuk menangkap kesalahan apa pun yang dilemparkan ke salah satu fungsi asinkron yang kami panggil atau penangannya

Satu masalah dengan contoh yang berdiri adalah bahwa itu tidak akan menampilkan puisi apa pun saat pertama kali dimuat. Untuk memperbaikinya, tambahkan dua baris berikut di bagian bawah kode Anda (tepat di atas penutup

// Call `fetch()`, passing in the URL.
fetch(url)
  // fetch() returns a promise. When we have received a response from the server,
  // the promise's `then()` handler is called with the response.
  .then((response) => {
    // Our handler throws an error if the request did not succeed.
    if (!response.ok) {
      throw new Error(`HTTP error: ${response.status}`);
    }
    // Otherwise (if the response succeeded), our handler fetches the response
    // as text by calling response.text(), and immediately returns the promise
    // returned by `response.text()`.
    return response.text();
  })
  // When response.text() has succeeded, the `then()` handler is called with
  // the text, and we copy it into the `poemDisplay` box.
  .then((text) => poemDisplay.textContent = text)
  // Catch any errors that might happen, and display a message
  // in the `poemDisplay` box.
  .catch((error) => poemDisplay.textContent = `Could not fetch verse: ${error}`);
0 tag) untuk memuat ayat 1 secara default, dan pastikan elemen <select> selalu menampilkan nilai yang benar

updateDisplay('Verse 1');
verseChoose.value = 'Verse 1';

Melayani contoh Anda dari server

Browser modern tidak akan menjalankan permintaan HTTP jika Anda hanya menjalankan contoh dari file lokal. Ini karena batasan keamanan (untuk informasi lebih lanjut tentang keamanan web, baca Keamanan situs web)

Untuk menyiasatinya, kita perlu menguji contoh dengan menjalankannya melalui server web lokal. Untuk mengetahui cara melakukannya, baca panduan kami untuk menyiapkan server pengujian lokal

Dalam contoh ini kami telah membuat situs sampel bernama The Can Store — ini adalah supermarket fiktif yang hanya menjual makanan kaleng. Anda dapat menemukan contoh ini langsung di GitHub, dan melihat kode sumbernya

Bagaimana saya bisa mendapatkan data dari situs web lain di html?

Secara default, situs menampilkan semua produk, namun Anda dapat menggunakan kontrol formulir di kolom sebelah kiri untuk memfilternya menurut kategori, atau istilah pencarian, atau keduanya

Ada cukup banyak kode rumit yang berurusan dengan pemfilteran produk berdasarkan kategori dan istilah pencarian, memanipulasi string sehingga data ditampilkan dengan benar di UI, dll. Kami tidak akan membahas semuanya di artikel, tetapi Anda dapat menemukan komentar ekstensif dalam kode (lihat can-script. js)

Namun, kami akan menjelaskan kode Fetch

Blok pertama yang menggunakan Fetch dapat ditemukan di awal JavaScript

fetch('products.json')
  .then((response) => {
    if (!response.ok) {
      throw new Error(`HTTP error: ${response.status}`);
    }
    return response.json();
  })
  .then((json) => initialize(json))
  .catch((err) => console.error(`Fetch problem: ${err.message}`));

Fungsi

function updateDisplay(verse) {

}
9 mengembalikan janji. Jika ini berhasil diselesaikan, fungsi di dalam blok
// Call `fetch()`, passing in the URL.
fetch(url)
  // fetch() returns a promise. When we have received a response from the server,
  // the promise's `then()` handler is called with the response.
  .then((response) => {
    // Our handler throws an error if the request did not succeed.
    if (!response.ok) {
      throw new Error(`HTTP error: ${response.status}`);
    }
    // Otherwise (if the response succeeded), our handler fetches the response
    // as text by calling response.text(), and immediately returns the promise
    // returned by `response.text()`.
    return response.text();
  })
  // When response.text() has succeeded, the `then()` handler is called with
  // the text, and we copy it into the `poemDisplay` box.
  .then((text) => poemDisplay.textContent = text)
  // Catch any errors that might happen, and display a message
  // in the `poemDisplay` box.
  .catch((error) => poemDisplay.textContent = `Could not fetch verse: ${error}`);
3 pertama berisi
// Call `fetch()`, passing in the URL.
fetch(url)
  // fetch() returns a promise. When we have received a response from the server,
  // the promise's `then()` handler is called with the response.
  .then((response) => {
    // Our handler throws an error if the request did not succeed.
    if (!response.ok) {
      throw new Error(`HTTP error: ${response.status}`);
    }
    // Otherwise (if the response succeeded), our handler fetches the response
    // as text by calling response.text(), and immediately returns the promise
    // returned by `response.text()`.
    return response.text();
  })
  // When response.text() has succeeded, the `then()` handler is called with
  // the text, and we copy it into the `poemDisplay` box.
  .then((text) => poemDisplay.textContent = text)
  // Catch any errors that might happen, and display a message
  // in the `poemDisplay` box.
  .catch((error) => poemDisplay.textContent = `Could not fetch verse: ${error}`);
4 yang dikembalikan dari jaringan

Di dalam fungsi ini kita

  • periksa apakah server tidak mengembalikan kesalahan (seperti
    // Call `fetch()`, passing in the URL.
    fetch(url)
      // fetch() returns a promise. When we have received a response from the server,
      // the promise's `then()` handler is called with the response.
      .then((response) => {
        // Our handler throws an error if the request did not succeed.
        if (!response.ok) {
          throw new Error(`HTTP error: ${response.status}`);
        }
        // Otherwise (if the response succeeded), our handler fetches the response
        // as text by calling response.text(), and immediately returns the promise
        // returned by `response.text()`.
        return response.text();
      })
      // When response.text() has succeeded, the `then()` handler is called with
      // the text, and we copy it into the `poemDisplay` box.
      .then((text) => poemDisplay.textContent = text)
      // Catch any errors that might happen, and display a message
      // in the `poemDisplay` box.
      .catch((error) => poemDisplay.textContent = `Could not fetch verse: ${error}`);
    
    5). Jika ya, kami membuang kesalahan
  • hubungi
    // Call `fetch()`, passing in the URL.
    fetch(url)
      // fetch() returns a promise. When we have received a response from the server,
      // the promise's `then()` handler is called with the response.
      .then((response) => {
        // Our handler throws an error if the request did not succeed.
        if (!response.ok) {
          throw new Error(`HTTP error: ${response.status}`);
        }
        // Otherwise (if the response succeeded), our handler fetches the response
        // as text by calling response.text(), and immediately returns the promise
        // returned by `response.text()`.
        return response.text();
      })
      // When response.text() has succeeded, the `then()` handler is called with
      // the text, and we copy it into the `poemDisplay` box.
      .then((text) => poemDisplay.textContent = text)
      // Catch any errors that might happen, and display a message
      // in the `poemDisplay` box.
      .catch((error) => poemDisplay.textContent = `Could not fetch verse: ${error}`);
    
    _6 sebagai tanggapan. Ini akan mengambil data sebagai objek JSON. Kami mengembalikan janji yang dikembalikan oleh
    // Call `fetch()`, passing in the URL.
    fetch(url)
      // fetch() returns a promise. When we have received a response from the server,
      // the promise's `then()` handler is called with the response.
      .then((response) => {
        // Our handler throws an error if the request did not succeed.
        if (!response.ok) {
          throw new Error(`HTTP error: ${response.status}`);
        }
        // Otherwise (if the response succeeded), our handler fetches the response
        // as text by calling response.text(), and immediately returns the promise
        // returned by `response.text()`.
        return response.text();
      })
      // When response.text() has succeeded, the `then()` handler is called with
      // the text, and we copy it into the `poemDisplay` box.
      .then((text) => poemDisplay.textContent = text)
      // Catch any errors that might happen, and display a message
      // in the `poemDisplay` box.
      .catch((error) => poemDisplay.textContent = `Could not fetch verse: ${error}`);
    
    7

Selanjutnya kita meneruskan fungsi ke dalam metode

verse = verse.replace(' ', '').toLowerCase();
const url = `${verse}.txt`;
_4 dari janji yang dikembalikan itu. Fungsi ini akan meneruskan objek yang berisi data respons sebagai JSON, yang kami berikan ke fungsi
// Call `fetch()`, passing in the URL.
fetch(url)
  // fetch() returns a promise. When we have received a response from the server,
  // the promise's `then()` handler is called with the response.
  .then((response) => {
    // Our handler throws an error if the request did not succeed.
    if (!response.ok) {
      throw new Error(`HTTP error: ${response.status}`);
    }
    // Otherwise (if the response succeeded), our handler fetches the response
    // as text by calling response.text(), and immediately returns the promise
    // returned by `response.text()`.
    return response.text();
  })
  // When response.text() has succeeded, the `then()` handler is called with
  // the text, and we copy it into the `poemDisplay` box.
  .then((text) => poemDisplay.textContent = text)
  // Catch any errors that might happen, and display a message
  // in the `poemDisplay` box.
  .catch((error) => poemDisplay.textContent = `Could not fetch verse: ${error}`);
9. Fungsi ini yang memulai proses menampilkan semua produk di antarmuka pengguna

Untuk menangani kesalahan, kami merantai blok

updateDisplay('Verse 1');
verseChoose.value = 'Verse 1';
0 ke ujung rantai. Ini berjalan jika janji gagal karena beberapa alasan. Di dalamnya, kami menyertakan fungsi yang diteruskan sebagai parameter, objek
updateDisplay('Verse 1');
verseChoose.value = 'Verse 1';
1. Objek
updateDisplay('Verse 1');
verseChoose.value = 'Verse 1';
_1 ini dapat digunakan untuk melaporkan sifat kesalahan yang telah terjadi, dalam hal ini kita melakukannya dengan
updateDisplay('Verse 1');
verseChoose.value = 'Verse 1';
3 sederhana

Namun, situs web lengkap akan menangani kesalahan ini dengan lebih baik dengan menampilkan pesan di layar pengguna dan mungkin menawarkan opsi untuk memperbaiki situasi tersebut, tetapi kami tidak memerlukan apa pun selain

updateDisplay('Verse 1');
verseChoose.value = 'Verse 1';
4 sederhana

Anda dapat menguji kasus kegagalan sendiri

  1. Buat salinan lokal dari file contoh
  2. Jalankan kode melalui server web (seperti dijelaskan di atas, di )
  3. Ubah jalur ke file yang sedang diambil, menjadi sesuatu seperti 'product. json' (pastikan salah eja)
  4. Sekarang muat file indeks di browser Anda (melalui
    updateDisplay('Verse 1');
    verseChoose.value = 'Verse 1';
    
    5) dan lihat di konsol pengembang browser Anda. Anda akan melihat pesan yang mirip dengan "Masalah pengambilan. kesalahan HTTP. 404"

Blok Ambil kedua dapat ditemukan di dalam fungsi

updateDisplay('Verse 1');
verseChoose.value = 'Verse 1';
6

fetch(url)
  .then((response) => {
    if (!response.ok) {
      throw new Error(`HTTP error: ${response.status}`);
    }
    return response.blob();
  })
  .then((blob) => showProduct(blob, product))
  .catch((err) => console.error(`Fetch problem: ${err.message}`));

Ini bekerja dengan cara yang hampir sama seperti yang sebelumnya, kecuali bahwa alih-alih menggunakan

// Call `fetch()`, passing in the URL.
fetch(url)
  // fetch() returns a promise. When we have received a response from the server,
  // the promise's `then()` handler is called with the response.
  .then((response) => {
    // Our handler throws an error if the request did not succeed.
    if (!response.ok) {
      throw new Error(`HTTP error: ${response.status}`);
    }
    // Otherwise (if the response succeeded), our handler fetches the response
    // as text by calling response.text(), and immediately returns the promise
    // returned by `response.text()`.
    return response.text();
  })
  // When response.text() has succeeded, the `then()` handler is called with
  // the text, and we copy it into the `poemDisplay` box.
  .then((text) => poemDisplay.textContent = text)
  // Catch any errors that might happen, and display a message
  // in the `poemDisplay` box.
  .catch((error) => poemDisplay.textContent = `Could not fetch verse: ${error}`);
6, kami menggunakan
updateDisplay('Verse 1');
verseChoose.value = 'Verse 1';
8. Dalam hal ini kami ingin mengembalikan respons kami sebagai file gambar, dan format data yang kami gunakan untuk itu adalah Blob (istilahnya adalah singkatan dari "Binary Large Object" dan pada dasarnya dapat digunakan untuk mewakili objek seperti file besar, seperti

Setelah kami berhasil menerima blob kami, kami menyebarkannya ke fungsi

updateDisplay('Verse 1');
verseChoose.value = 'Verse 1';
9 kami, yang menampilkannya

Terkadang, terutama dalam kode lama, Anda akan melihat API lain bernama

fetch('products.json')
  .then((response) => {
    if (!response.ok) {
      throw new Error(`HTTP error: ${response.status}`);
    }
    return response.json();
  })
  .then((json) => initialize(json))
  .catch((err) => console.error(`Fetch problem: ${err.message}`));
0 (sering disingkat "XHR") yang digunakan untuk membuat permintaan HTTP. Ini mendahului Fetch, dan benar-benar merupakan API pertama yang banyak digunakan untuk mengimplementasikan AJAX. Kami menyarankan Anda menggunakan Ambil jika Anda bisa. ini adalah API yang lebih sederhana dan memiliki lebih banyak fitur daripada
fetch('products.json')
  .then((response) => {
    if (!response.ok) {
      throw new Error(`HTTP error: ${response.status}`);
    }
    return response.json();
  })
  .then((json) => initialize(json))
  .catch((err) => console.error(`Fetch problem: ${err.message}`));
0. Kami tidak akan melalui contoh yang menggunakan
fetch('products.json')
  .then((response) => {
    if (!response.ok) {
      throw new Error(`HTTP error: ${response.status}`);
    }
    return response.json();
  })
  .then((json) => initialize(json))
  .catch((err) => console.error(`Fetch problem: ${err.message}`));
0, tetapi kami akan menunjukkan kepada Anda seperti apa versi
fetch('products.json')
  .then((response) => {
    if (!response.ok) {
      throw new Error(`HTTP error: ${response.status}`);
    }
    return response.json();
  })
  .then((json) => initialize(json))
  .catch((err) => console.error(`Fetch problem: ${err.message}`));
0 dari permintaan penyimpanan kaleng pertama kami

const request = new XMLHttpRequest();

try {
  request.open('GET', 'products.json');

  request.responseType = 'json';

  request.addEventListener('load', () => initialize(request.response));
  request.addEventListener('error', () => console.error('XHR error'));

  request.send();

} catch (error) {
  console.error(`XHR error ${request.status}`);
}

Ada lima tahap untuk ini

  1. Buat objek
    fetch('products.json')
      .then((response) => {
        if (!response.ok) {
          throw new Error(`HTTP error: ${response.status}`);
        }
        return response.json();
      })
      .then((json) => initialize(json))
      .catch((err) => console.error(`Fetch problem: ${err.message}`));
    
    _0 baru
  2. Panggil metode
    fetch('products.json')
      .then((response) => {
        if (!response.ok) {
          throw new Error(`HTTP error: ${response.status}`);
        }
        return response.json();
      })
      .then((json) => initialize(json))
      .catch((err) => console.error(`Fetch problem: ${err.message}`));
    
    _5 untuk menginisialisasinya
  3. Tambahkan pendengar acara ke acara
    fetch('products.json')
      .then((response) => {
        if (!response.ok) {
          throw new Error(`HTTP error: ${response.status}`);
        }
        return response.json();
      })
      .then((json) => initialize(json))
      .catch((err) => console.error(`Fetch problem: ${err.message}`));
    
    _6, yang aktif saat respons berhasil diselesaikan. Di pendengar kami memanggil
    // Call `fetch()`, passing in the URL.
    fetch(url)
      // fetch() returns a promise. When we have received a response from the server,
      // the promise's `then()` handler is called with the response.
      .then((response) => {
        // Our handler throws an error if the request did not succeed.
        if (!response.ok) {
          throw new Error(`HTTP error: ${response.status}`);
        }
        // Otherwise (if the response succeeded), our handler fetches the response
        // as text by calling response.text(), and immediately returns the promise
        // returned by `response.text()`.
        return response.text();
      })
      // When response.text() has succeeded, the `then()` handler is called with
      // the text, and we copy it into the `poemDisplay` box.
      .then((text) => poemDisplay.textContent = text)
      // Catch any errors that might happen, and display a message
      // in the `poemDisplay` box.
      .catch((error) => poemDisplay.textContent = `Could not fetch verse: ${error}`);
    
    _9 dengan data
  4. Tambahkan pendengar acara ke acara
    fetch('products.json')
      .then((response) => {
        if (!response.ok) {
          throw new Error(`HTTP error: ${response.status}`);
        }
        return response.json();
      })
      .then((json) => initialize(json))
      .catch((err) => console.error(`Fetch problem: ${err.message}`));
    
    _8, yang diaktifkan saat permintaan mengalami kesalahan
  5. Kirim permintaan

Kami juga harus membungkus semuanya dalam percobaan. tangkap blok, untuk menangani kesalahan apa pun yang dilemparkan oleh

fetch('products.json')
  .then((response) => {
    if (!response.ok) {
      throw new Error(`HTTP error: ${response.status}`);
    }
    return response.json();
  })
  .then((json) => initialize(json))
  .catch((err) => console.error(`Fetch problem: ${err.message}`));
5 atau
fetch(url)
  .then((response) => {
    if (!response.ok) {
      throw new Error(`HTTP error: ${response.status}`);
    }
    return response.blob();
  })
  .then((blob) => showProduct(blob, product))
  .catch((err) => console.error(`Fetch problem: ${err.message}`));
0

Mudah-mudahan menurut Anda Fetch API merupakan peningkatan dari ini. Secara khusus, lihat bagaimana kita harus menangani kesalahan di dua tempat yang berbeda

Artikel ini menunjukkan cara mulai menggunakan Fetch untuk mengambil data dari server

Namun ada banyak topik berbeda yang dibahas dalam artikel ini, yang hanya benar-benar menggores permukaan. Untuk detail lebih lanjut tentang subjek ini, coba artikel berikut

Bisakah Anda mengikis data dari situs web mana pun?

Beberapa situs web secara eksplisit melarang pengikisan web, sementara yang lain mengizinkannya, meskipun mungkin juga membatasi data apa yang dapat Anda kumpulkan. Untuk memeriksa apakah situs web yang ingin Anda kikis mengizinkannya, lihat file robots-txt mereka. Anda dapat mengaksesnya dengan menambahkan nama file ini ke nama domain

Bagaimana cara menarik data dari situs web ke situs web lain?

Data diambil dari halaman web menggunakan perangkat lunak yang disebut web scraper, yang pada dasarnya adalah bot web. .
Kode pengikis web dengan Python. .
Gunakan layanan data. .
Gunakan Excel untuk ekstraksi data. .
Alat pengikis web

Bagaimana cara mengikis data dari beberapa situs web?

Q. Bagaimana cara mengikis data dari beberapa laman web/URL? .
Seret tindakan Loop ke alur kerja
Pilih mode "Daftar URL".
Masukkan/Tempel daftar URL yang ingin Anda tempel ke dalam kotak teks
Jangan lupa klik tombol OK dan Save

Bagaimana cara mendapatkan data dari URL?

Cara Mengakses Data Dari URL Menggunakan Java .
Buat kelas URLConnectionReader
Sekarang, buat objek URL baru dan berikan URL yang diinginkan yang ingin kita akses
Sekarang, dengan menggunakan objek url ini, buat objek URLConnection
Gunakan InputStreamReader dan BufferedReader untuk membaca dari koneksi URL