Cách gửi yêu cầu HTTP một cách ổn định khi người dùng rời khỏi trang
(css-tricks.com)- Đôi khi có những trường hợp bạn muốn ghi log khi người dùng chuyển sang trang khác hoặc gửi biểu mẫu
- Việc đặt
fetchtrong sự kiện click không đảm bảo rằng yêu cầu chắc chắn sẽ được gửi đi - Vì vậy có thể thử gọi Fetch rồi sau đó chuyển trang bằng
window.location, nhưng cách này cũng không được đảm bảo- Vì XHR là bất đồng bộ và không chặn
- Có thể xử lý bằng cách
awaitPromise củafetch, nhưng cách này cũng có nhược điểm- Tốc độ xử lý chậm hơn nên trải nghiệm người dùng kém đi
- Không ổn định như mong đợi. Không thể xử lý các trường hợp như đóng tab trình duyệt
- Trình duyệt có nhiều tùy chọn để giữ lại yêu cầu HTTP
- Nếu dùng cờ
keepalivetrong Fetch thì ngay cả khi trang bị ngắt, yêu cầu đó vẫn được duy trì - Một hàm đơn giản hơn như
Navigator.sendBeacon() - Các trình duyệt cũng hỗ trợ thuộc tính
pingtrên thẻa(nhược điểm là chỉ dùng được cho liên kết, và FF không hỗ trợ mặc định)
- Nếu dùng cờ
- Vậy nên dùng gì?
- Nếu có thể thì dùng
fetch()+keepalive- 80% trình duyệt hỗ trợ
- Có thể gửi header tùy chỉnh
- Cũng dùng được với yêu cầu GET
- Hỗ trợ cả các trình duyệt cũ
sendBeacon()phù hợp khi- 96% trình duyệt hỗ trợ
- Không cần quá nhiều tùy biến
- Thích một API gọn gàng và thanh lịch
- Không muốn cạnh tranh với các yêu cầu ưu tiên khác của trình duyệt
- Nếu có thể thì dùng
Chưa có bình luận nào.