Làm cách nào để gửi yêu cầu đến máy chủ bằng JavaScript?

Trong bài viết này, chúng tôi trình bày cách tạo các yêu cầu HTTP GET và POST trong JavaScript. Chúng tôi sử dụng Fetch API và thư viện Axios

Giao thức truyền tải siêu văn bản (HTTP) là một giao thức ứng dụng cho các hệ thống thông tin siêu phương tiện, cộng tác, phân tán. Giao thức HTTP là nền tảng giao tiếp dữ liệu cho World Wide Web

Phương thức HTTP GET yêu cầu biểu diễn tài nguyên đã chỉ định. Yêu cầu sử dụng GET chỉ nên truy xuất dữ liệu

Phương thức HTTP POST gửi dữ liệu đến máy chủ. Nó thường được sử dụng khi tải lên một tệp hoặc khi gửi một biểu mẫu web đã hoàn thành

API tìm nạp

Fetch API cung cấp giao diện JavaScript để truy cập và thao tác các phần của đường dẫn HTTP, chẳng hạn như yêu cầu và phản hồi. API bắt nguồn từ trình duyệt

2 là một hàm toàn cầu nhận các tham số url và tùy chọn và trả về một lời hứa. Lời hứa giải quyết phản hồi của yêu cầu

let promise = fetch(url, [options])

Nếu chúng tôi không cung cấp

3, một yêu cầu GET đơn giản tải xuống nội dung của url sẽ được tạo

Axios là ứng dụng khách HTTP dựa trên lời hứa cho trình duyệt và Node. js. Axios giúp dễ dàng gửi các yêu cầu HTTP không đồng bộ đến các điểm cuối REST và thực hiện các thao tác CRUD. Nó có thể được sử dụng trong JavaScript đơn giản hoặc với một thư viện như Vue hoặc React

JS lấy yêu cầu NHẬN

Ví dụ sau tạo một yêu cầu GET đơn giản và xử lý kết quả dưới dạng văn bản

Chúng tôi nhận được nội dung của mã web. trang web của tôi

let url = 'http://webcode.me';
let res = await fetch(url);

Phương thức

2 chỉ lấy URL làm tham số. Trong trường hợp như vậy, yêu cầu mặc định là yêu cầu GET

let text = await res.text();

Chúng tôi nhận được nội dung từ yêu cầu dưới dạng văn bản thuần túy

Trong ví dụ tiếp theo, chúng tôi tạo một yêu cầu POST với dữ liệu JSON

Yêu cầu POST được gửi tới http. //httpbin. tổ chức/bài đăng

________số 8_______

Đây là dữ liệu được gửi

Quảng cáo
let res = await fetch(url, {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
    },
    body: JSON.stringify(data),
});

Chúng tôi đặt tham số

5 thành POST và chọn 
6 cho loại nội dung. Dữ liệu được xâu chuỗi thành tham số 
7

let ret = await res.json();
return JSON.parse(ret.data);

Chúng tôi lấy lại dữ liệu dưới dạng chuỗi JSON và phân tích nó thành đối tượng JSON

JS NHẬN yêu cầu với Axios

Ví dụ sau tạo một yêu cầu GET với thư viện Axios

$ npm i axios

Chúng tôi cài đặt mô-đun Axios

const axios = require('axios');

async function doGetRequest() {

  let res = await axios.get('http://webcode.me');

  let data = res.data;
  console.log(data);
}

doGetRequest();

Ví dụ lấy một trang chủ từ một trang web đơn giản. Nó sử dụng cú pháp

8

JS POST yêu cầu với Axios

Trong ví dụ sau, chúng tôi tạo một yêu cầu POST với dữ liệu biểu mẫu

0

Chúng tôi cài đặt mô-đun

9

Với ứng dụng/x-www-form-urlencoded, dữ liệu được gửi trong phần thân của yêu cầu;

Một nhiệm vụ rất phổ biến khác trong các trang web và ứng dụng hiện đại là truy xuất các mục dữ liệu riêng lẻ từ máy chủ để cập nhật các phần của trang web mà không phải tải toàn bộ trang mới. Chi tiết có vẻ nhỏ này lại có tác động rất lớn đến hiệu suất và hành vi của các trang web, vì vậy, trong bài viết này, chúng tôi sẽ giải thích khái niệm này và xem xét các công nghệ giúp điều đó trở nên khả thi. cụ thể là API tìm nạp

điều kiện tiên quyết. Kiến thức cơ bản về JavaScript (xem các bước đầu tiên, khối xây dựng, đối tượng JavaScript), kiến ​​thức cơ bản về Client-side APIsObjective. Để tìm hiểu cách lấy dữ liệu từ máy chủ và sử dụng nó để cập nhật nội dung của trang web

Một trang web bao gồm một trang HTML và (thường) nhiều tệp khác, chẳng hạn như biểu định kiểu, tập lệnh và hình ảnh. Mô hình tải trang cơ bản trên Web là trình duyệt của bạn thực hiện một hoặc nhiều yêu cầu HTTP tới máy chủ để cung cấp các tệp cần thiết để hiển thị trang và máy chủ sẽ phản hồi với các tệp được yêu cầu. Nếu bạn truy cập một trang khác, trình duyệt sẽ yêu cầu các tệp mới và máy chủ sẽ phản hồi với chúng

Mô hình này hoạt động hoàn toàn tốt cho nhiều trang web. Nhưng hãy xem xét một trang web rất dựa trên dữ liệu. Ví dụ: một trang web thư viện như Thư viện Công cộng Vancouver. Trong số những thứ khác, bạn có thể coi một trang web như thế này là giao diện người dùng với cơ sở dữ liệu. Nó có thể cho phép bạn tìm kiếm một thể loại sách cụ thể hoặc có thể hiển thị cho bạn các đề xuất cho những cuốn sách bạn có thể thích, dựa trên những cuốn sách bạn đã mượn trước đây. Khi bạn làm điều này, nó cần cập nhật trang với bộ sách mới để hiển thị. Nhưng lưu ý rằng hầu hết nội dung trang — bao gồm các mục như đầu trang, thanh bên và chân trang — vẫn giữ nguyên

Rắc rối với mô hình truyền thống ở đây là chúng tôi phải tìm nạp và tải toàn bộ trang, ngay cả khi chúng tôi chỉ cần cập nhật một phần của nó. Điều này không hiệu quả và có thể dẫn đến trải nghiệm người dùng kém

Vì vậy, thay vì mô hình truyền thống, nhiều trang web sử dụng API JavaScript để yêu cầu dữ liệu từ máy chủ và cập nhật nội dung trang mà không cần tải trang. Vì vậy, khi người dùng tìm kiếm một sản phẩm mới, trình duyệt chỉ yêu cầu dữ liệu cần thiết để cập nhật trang - chẳng hạn như bộ sách mới để hiển thị

API chính ở đây là Fetch API. Điều này cho phép JavaScript chạy trong một trang để thực hiện yêu cầu HTTP tới máy chủ để truy xuất các tài nguyên cụ thể. Khi máy chủ cung cấp chúng, JavaScript có thể sử dụng dữ liệu để cập nhật trang, thường bằng cách sử dụng API thao tác DOM. Dữ liệu được yêu cầu thường là JSON, đây là định dạng tốt để truyền dữ liệu có cấu trúc, nhưng cũng có thể là HTML hoặc chỉ văn bản

Đây là mẫu phổ biến cho các trang web dựa trên dữ liệu như Amazon, YouTube, eBay, v.v. Với mô hình này

  • Cập nhật trang nhanh hơn rất nhiều và bạn không phải đợi trang làm mới, nghĩa là trang web sẽ nhanh hơn và phản hồi nhanh hơn
  • Ít dữ liệu được tải xuống trên mỗi bản cập nhật, nghĩa là ít lãng phí băng thông hơn. Đây có thể không phải là vấn đề lớn trên máy tính để bàn có kết nối băng thông rộng nhưng lại là vấn đề lớn trên thiết bị di động và ở các quốc gia không có dịch vụ internet nhanh phổ biến

Ghi chú. Trong những ngày đầu, kỹ thuật chung này được gọi là JavaScript và XML không đồng bộ (Ajax), bởi vì nó có xu hướng yêu cầu dữ liệu XML. Ngày nay, điều này thường không xảy ra (bạn có nhiều khả năng yêu cầu JSON hơn), nhưng kết quả vẫn như vậy và thuật ngữ "Ajax" vẫn thường được sử dụng để mô tả kỹ thuật này

Để tăng tốc hơn nữa, một số trang web cũng lưu trữ nội dung và dữ liệu trên máy tính của người dùng khi chúng được yêu cầu lần đầu, nghĩa là trong các lần truy cập tiếp theo, họ sử dụng các phiên bản cục bộ thay vì tải xuống các bản sao mới mỗi khi trang được tải lần đầu. Nội dung chỉ được tải lại từ máy chủ khi nó đã được cập nhật

Hãy xem qua một vài ví dụ về Fetch API

Đối với ví dụ này, chúng tôi sẽ yêu cầu dữ liệu từ một số tệp văn bản khác nhau và sử dụng chúng để điền vào một khu vực nội dung

Loạt tệp này sẽ đóng vai trò là cơ sở dữ liệu giả mạo của chúng tôi; . Tuy nhiên, ở đây, chúng tôi muốn giữ cho nó đơn giản và tập trung vào phần phía máy khách của tài liệu này.

Để bắt đầu ví dụ này, hãy tạo một bản sao cục bộ của bắt đầu tìm nạp. html và bốn tệp văn bản — câu 1. txt, câu 2. txt, câu 3. txt và câu 4. txt — trong một thư mục mới trên máy tính của bạn. Trong ví dụ này, chúng tôi sẽ lấy một câu thơ khác của bài thơ (mà bạn có thể nhận ra rõ ràng) khi nó được chọn trong trình đơn thả xuống

Ngay bên trong phần tử

function updateDisplay(verse) {

}

Chúng tôi sẽ bắt đầu chức năng của mình bằng cách xây dựng một URL tương đối trỏ tới tệp văn bản mà chúng tôi muốn tải, vì chúng tôi sẽ cần nó sau này. Giá trị của phần tử luôn hiển thị đúng giá trị

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

Phục vụ ví dụ của bạn từ một máy chủ

Các trình duyệt hiện đại sẽ không chạy các yêu cầu HTTP nếu bạn chỉ chạy ví dụ từ tệp cục bộ. Điều này là do các hạn chế về bảo mật (để biết thêm về bảo mật web, hãy đọc Bảo mật trang web)

Để giải quyết vấn đề này, chúng ta cần kiểm tra ví dụ bằng cách chạy nó thông qua máy chủ web cục bộ. Để tìm hiểu cách thực hiện việc này, hãy đọc hướng dẫn của chúng tôi để thiết lập máy chủ thử nghiệm cục bộ

Trong ví dụ này, chúng tôi đã tạo một trang web mẫu có tên The Can Store — đó là một siêu thị hư cấu chỉ bán đồ hộp. Bạn có thể tìm thấy ví dụ này trực tiếp trên GitHub và xem mã nguồn

Làm cách nào để gửi yêu cầu đến máy chủ bằng JavaScript?

Theo mặc định, trang web hiển thị tất cả các sản phẩm nhưng bạn có thể sử dụng các điều khiển biểu mẫu ở cột bên trái để lọc chúng theo danh mục hoặc cụm từ tìm kiếm hoặc cả hai

Có khá nhiều mã phức tạp xử lý việc lọc sản phẩm theo danh mục và cụm từ tìm kiếm, thao tác chuỗi để dữ liệu hiển thị chính xác trong giao diện người dùng, v.v. Chúng tôi sẽ không thảo luận tất cả về nó trong bài viết, nhưng bạn có thể tìm thấy các nhận xét mở rộng trong mã (xem can-script. js)

Tuy nhiên, chúng tôi sẽ giải thích về Fetch code

Có thể tìm thấy khối đầu tiên sử dụng Tìm nạp khi bắt đầu 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}`));

Hàm

function updateDisplay(verse) {

}
9 trả về một lời hứa. Nếu điều này hoàn thành thành công, chức năng bên trong khối
// 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 đầu tiên chứa
// 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 được trả về từ mạng

Bên trong chức năng này, chúng tôi

  • kiểm tra xem máy chủ có trả về lỗi không (chẳng hạn như
    // 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). Nếu nó đã làm, chúng tôi ném lỗi
  • gọi
    // 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 khi có phản hồi. Điều này sẽ lấy dữ liệu dưới dạng đối tượng JSON. Chúng tôi trả lại lời hứa được trả lại bởi
    // 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

Tiếp theo, chúng tôi chuyển một hàm vào phương thức

verse = verse.replace(' ', '').toLowerCase();
const url = `${verse}.txt`;
4 của lời hứa được trả lại đó. Hàm này sẽ được truyền một đối tượng chứa dữ liệu phản hồi dưới dạng JSON mà chúng ta truyền vào hàm
// 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. Chức năng này bắt đầu quá trình hiển thị tất cả các sản phẩm trong giao diện người dùng

Để xử lý lỗi, chúng tôi xâu chuỗi một khối

updateDisplay('Verse 1');
verseChoose.value = 'Verse 1';
0 vào cuối chuỗi. Điều này chạy nếu lời hứa thất bại vì một số lý do. Bên trong nó, chúng ta bao gồm một hàm được truyền dưới dạng tham số, một đối tượng
updateDisplay('Verse 1');
verseChoose.value = 'Verse 1';
1. Đối tượng
updateDisplay('Verse 1');
verseChoose.value = 'Verse 1';
1 này có thể được sử dụng để báo cáo bản chất của lỗi đã xảy ra, trong trường hợp này, chúng tôi thực hiện điều đó với một
updateDisplay('Verse 1');
verseChoose.value = 'Verse 1';
3 đơn giản

Tuy nhiên, một trang web hoàn chỉnh sẽ xử lý lỗi này nhẹ nhàng hơn bằng cách hiển thị thông báo trên màn hình của người dùng và có thể cung cấp các tùy chọn để khắc phục tình huống, nhưng chúng tôi không cần gì hơn là một

updateDisplay('Verse 1');
verseChoose.value = 'Verse 1';
4 đơn giản

Bạn có thể tự kiểm tra trường hợp thất bại

  1. Tạo một bản sao cục bộ của các tệp ví dụ
  2. Chạy mã thông qua máy chủ web (như được mô tả ở trên, trong )
  3. Sửa đổi đường dẫn đến tệp đang được tìm nạp, thành một cái gì đó như 'product. json' (đảm bảo rằng nó bị viết sai chính tả)
  4. Bây giờ hãy tải tệp chỉ mục trong trình duyệt của bạn (thông qua
    updateDisplay('Verse 1');
    verseChoose.value = 'Verse 1';
    
    5) và tìm trong bảng điều khiển dành cho nhà phát triển trình duyệt của bạn. Bạn sẽ thấy một thông báo tương tự như "Tìm nạp vấn đề. Lỗi HTTP. 404"

Khối Fetch thứ hai có thể được tìm thấy bên trong hàm

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}`));

Điều này hoạt động theo cách tương tự như cách trước, ngoại trừ việc thay vì sử dụng

// 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, chúng tôi sử dụng
updateDisplay('Verse 1');
verseChoose.value = 'Verse 1';
8. Trong trường hợp này, chúng tôi muốn trả về phản hồi của mình dưới dạng tệp hình ảnh và định dạng dữ liệu chúng tôi sử dụng cho đó là Blob (thuật ngữ này là từ viết tắt của "Đối tượng lớn nhị phân" và về cơ bản có thể được sử dụng để biểu thị các đối tượng giống như tệp lớn, chẳng hạn

Khi chúng tôi đã nhận thành công blob của mình, chúng tôi chuyển nó vào hàm

updateDisplay('Verse 1');
verseChoose.value = 'Verse 1';
9 của mình, hàm này sẽ hiển thị nó

Đôi khi, đặc biệt là trong mã cũ hơn, bạn sẽ thấy một API khác có tên là

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 (thường được viết tắt là "XHR") được sử dụng để thực hiện các yêu cầu HTTP. Tìm nạp trước này và thực sự là API đầu tiên được sử dụng rộng rãi để triển khai AJAX. Chúng tôi khuyên bạn nên sử dụng Tìm nạp nếu có thể. đó là một API đơn giản hơn và có nhiều tính năng hơn
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. Chúng tôi sẽ không đi qua một ví dụ sử dụng
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, nhưng chúng tôi sẽ cho bạn thấy phiên bản
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 của yêu cầu lưu trữ lon đầu tiên của chúng tôi trông như thế nào

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}`);
}

Có năm giai đoạn này

  1. Tạo một đối tượng
    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 mới
  2. Gọi phương thức
    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 của nó để khởi tạo nó
  3. Thêm một trình lắng nghe sự kiện vào sự kiện
    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 của nó, sự kiện này sẽ kích hoạt khi phản hồi hoàn tất thành công. Trong trình nghe, chúng tôi gọi
    // 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 với dữ liệu
  4. Thêm một trình lắng nghe sự kiện vào sự kiện
    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 của nó, sự kiện này kích hoạt khi yêu cầu gặp lỗi
  5. Gửi yêu cầu

Chúng tôi cũng phải cố gắng hết sức. bắt khối, để xử lý bất kỳ lỗi nào do

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 hoặc
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 đưa ra

Hy vọng rằng bạn nghĩ Fetch API là một cải tiến về điều này. Đặc biệt, hãy xem cách chúng tôi phải xử lý lỗi ở hai nơi khác nhau

Bài viết này hướng dẫn cách bắt đầu làm việc với Fetch để tìm nạp dữ liệu từ máy chủ

Tuy nhiên, có rất nhiều chủ đề khác nhau được thảo luận trong bài viết này, điều này chỉ thực sự làm trầy xước bề mặt. Để biết thêm chi tiết về các chủ đề này, hãy thử các bài viết sau

Làm cách nào để gửi yêu cầu bằng JavaScript?

Cách gửi yêu cầu GET trong JavaScript bằng XMLHttpRequest .
Tạo một đối tượng XMLHttpRequest mới
Mở kết nối bằng cách chỉ định loại yêu cầu và điểm cuối (URL của máy chủ)
Gửi yêu cầu
Lắng nghe phản hồi của máy chủ

Chúng tôi có thể gửi dữ liệu đến máy chủ bằng yêu cầu GET không?

Tôi có thể gửi dữ liệu bằng phương thức HTTP GET không? . Nhưng bạn vẫn có thể gửi dữ liệu đến máy chủ bằng các tham số URL. Trong trường hợp này, bạn bị giới hạn ở kích thước tối đa của URL, khoảng 2000 ký tự (tùy thuộc vào trình duyệt). No, HTTP GET requests cannot have a message body. But you still can send data to the server using the URL parameters. In this case, you are limited to the maximum size of the URL, which is about 2000 characters (depends on the browser).

Làm cách nào để yêu cầu một URL trong JavaScript?

Cách nhận URL hiện tại trong JavaScript .
hàm getCienURL () {
cửa sổ trở lại. vị trí. href
const url = getCienURL()

Làm cách nào để yêu cầu API trong JavaScript?

Dưới đây là những cách khả thi để thực hiện lệnh gọi API. .
XMLHttpRequest
tìm về
trục
jQuery