Việc giới thiệu XMLHttpRequest (XHR) trong các trình duyệt vào giữa những năm 2000 là một thành công lớn cho Nền tảng web. Hãy xem nó hoạt động như thế nào.
- Giới thiệu
- Một yêu cầu XHR mẫu
- Tham số open () bổ sung
onreadystatechange
- Hủy yêu cầu XHR
- So sánh với jQuery
- So sánh với Tìm nạp
- Yêu cầu tên miền chéo
- Tải lên tệp bằng XHR
Giới thiệu
Việc giới thiệu XMLHttpRequest (XHR) trong các trình duyệt vào giữa những năm 2000 là một thành công lớn cho Nền tảng web. Hãy xem nó hoạt động như thế nào.
Những thứ bây giờ trông bình thường, trở lại trong ngày, trông giống như chúng đến từ tương lai. Ví dụ, tôi đang nói về GMail hoặc Google Maps, tất cả đều dựa phần lớn vào XHR.
XHR được phát minh tại Microsoft vào những năm 90 và trở thành một tiêu chuẩn thực tế khi tất cả các trình duyệt triển khai nó trong giai đoạn 2002-2006. W3C chuẩn hóa XMLHttpRequest vào năm 2006.
Vì đôi khi nó có thể xảy ra trong Nền tảng web, ban đầu có một số mâu thuẫn khiến việc làm việc với XHR khá khác biệt trên nhiều trình duyệt.
Các thư viện như jQuery đã trở nên phổ biến hơn bằng cách cung cấp tính trừu tượng dễ sử dụng cho các nhà phát triển và điều này đã giúp phổ biến việc sử dụng công nghệ này.
Một yêu cầu XHR mẫu
Đoạn mã sau tạo một đối tượng yêu cầu XMLHttpRequest (XHR) và đính kèm một hàm gọi lại phản hồi trênonreadystatechange
biến cố.
Kết nối xhr được thiết lập để thực hiện yêu cầu GET đểhttps://yoursite.com
và nó bắt đầu vớisend()
phương pháp:
const xhr = new XMLHttpRequest()
xhr.onreadystatechange = () => {
if (xhr.readyState === 4) {
xhr.status === 200 ? console.log(xhr.responseText) : console.error('error')
}
}
xhr.open('GET', 'https://yoursite.com')
xhr.send()
Tham số open () bổ sung
Trong ví dụ trên, chúng tôi chỉ chuyển phương thức và URL cho yêu cầu.
Chúng tôi cũng có thể chỉ định các phương thức HTTP khác - (get
,post
,head
,put
,delete
,options
).
Các thông số khác cho phép bạn chỉ định một cờ để làm cho yêu cầu đồng bộ nếu được đặt thành false và một tập hợp thông tin xác thực để xác thực HTTP:
open(method, url, asynchronous, username, password)
onreadystatechange
Cáconreadystatechange
được gọi nhiều lần trong một yêu cầu XHR. Chúng tôi rõ ràng bỏ qua tất cả các trạng thái ngoàireadyState === 4
, có nghĩa là yêu cầu đã được thực hiện.
Các tiểu bang là
- 1 (ĐÃ MỞ): yêu cầu bắt đầu
- 2 (HEADERS_RECEIVED): các tiêu đề HTTP đã được nhận
- 3 (TẢI): phản hồi bắt đầu tải xuống
- 4 (XONG): phản hồi đã được tải xuống
Hủy yêu cầu XHR
Yêu cầu XHR có thể bị hủy bỏ bằng cách gọiabort()
phương pháp trênxhr
vật.
So sánh với jQuery
Với jQuery, những dòng này có thể được dịch thành:
$.get('https://yoursite.com', data => {
console.log(data)
}).fail(err => {
console.error(err)
})
So sánh với Tìm nạp
VớiAPI tìm nạpđây là mã tương đương:
fetch('https://yoursite.com')
.then(data => {
console.log(data)
})
.catch(err => {
console.error(err)
})
Yêu cầu tên miền chéo
Lưu ý rằng kết nối XMLHttpRequest phải tuân theo các giới hạn cụ thể được thực thi vì lý do bảo mật.
Một trong những điều rõ ràng nhất là việc thực thi chính sách cùng xuất xứ.
Bạn không thể truy cập tài nguyên trên máy chủ khác,trừ khimáy chủ hỗ trợ rõ ràng điều này bằng cách sử dụngCORS (Chia sẻ tài nguyên nguồn gốc chéo).
Tải lên tệp bằng XHR
Kiểm tra hướng dẫn của tôi vềcách tải tệp lên bằng XHR.
Tải xuống miễn phí của tôiSổ tay dành cho Người mới bắt đầu JavaScript
Các hướng dẫn khác về trình duyệt:
- Một số thủ thuật hữu ích có sẵn trong HTML5
- Cách tôi làm cho một trang web dựa trên CMS hoạt động ngoại tuyến
- Hướng dẫn hoàn chỉnh về ứng dụng web tiến bộ
- API tìm nạp
- Hướng dẫn API đẩy
- API nhắn tin kênh
- Hướng dẫn Nhân viên Dịch vụ
- Hướng dẫn API bộ nhớ cache
- Hướng dẫn API thông báo
- Đi sâu vào IndexedDB
- API Bộ chọn: querySelector và querySelectorAll
- Tải JavaScript hiệu quả với trì hoãn và không đồng bộ
- Mô hình đối tượng tài liệu (DOM)
- API lưu trữ web: lưu trữ cục bộ và lưu trữ phiên
- Tìm hiểu cách hoạt động của HTTP Cookies
- API lịch sử
- Định dạng hình ảnh WebP
- XMLHttpRequest (XHR)
- Hướng dẫn chuyên sâu về SVG
- URL dữ liệu là gì
- Lộ trình tìm hiểu Nền tảng Web
- CORS, Chia sẻ tài nguyên đa nguồn gốc
- Nhân viên web
- Hướng dẫn requestAnimationFrame ()
- Doctype là gì
- Làm việc với Bảng điều khiển DevTools và API Bảng điều khiển
- API tổng hợp giọng nói
- Cách chờ sự kiện DOM sẵn sàng bằng JavaScript thuần túy
- Cách thêm lớp vào phần tử DOM
- Cách lặp qua các phần tử DOM từ querySelectorAll
- Cách xóa một lớp khỏi phần tử DOM
- Cách kiểm tra xem một phần tử DOM có một lớp hay không
- Cách thay đổi giá trị nút DOM
- Cách thêm sự kiện nhấp chuột vào danh sách các phần tử DOM được trả về từ querySelectorAll
- WebRTC, API web thời gian thực
- Cách lấy vị trí cuộn của một phần tử trong JavaScript
- Cách thay thế một phần tử DOM
- Cách chỉ chấp nhận hình ảnh trong trường tệp đầu vào
- Tại sao sử dụng phiên bản xem trước của trình duyệt?
- Đối tượng Blob
- Đối tượng tệp
- Đối tượng FileReader
- Đối tượng FileList
- ArrayBuffer
- ArrayBufferView
- Đối tượng URL
- Mảng đã nhập
- Đối tượng DataView
- API BroadcastChannel
- API luồng
- Đối tượng FormData
- Đối tượng Điều hướng
- Cách sử dụng API vị trí địa lý
- Cách sử dụng getUserMedia ()
- Cách sử dụng API Kéo và Thả
- Cách làm việc với tính năng cuộn trên các Trang Web
- Xử lý các biểu mẫu trong JavaScript
- Sự kiện bàn phím
- Sự kiện chuột
- Chạm vào sự kiện
- Cách xóa tất cả phần tử con khỏi phần tử DOM
- Cách tạo thuộc tính HTML bằng vanilla Javascript
- Làm cách nào để kiểm tra xem một hộp kiểm đã được chọn bằng JavaScript hay chưa?
- Cách sao chép vào khay nhớ tạm bằng JavaScript
- Cách tắt một nút bằng JavaScript
- Cách làm cho một trang có thể chỉnh sửa trong trình duyệt
- Cách lấy giá trị chuỗi truy vấn trong JavaScript với URLSearchParams
- Cách xóa tất cả CSS khỏi một trang cùng một lúc
- Cách sử dụng insertAdjacentHTML
- Safari, cảnh báo trước khi thoát
- Cách thêm hình ảnh vào DOM bằng JavaScript
- Cách đặt lại biểu mẫu
- Cách sử dụng Google Fonts