Request: hàm khởi tạo Request()
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. It’s been available across browsers since March 2017.
* Some parts of this feature may have varying levels of support.
Note: This feature is available in Web Workers.
Hàm khởi tạo Request() tạo một đối tượng Request mới.
Cú pháp
new Request(input)
new Request(input, options)
Tham số
input-
Xác định tài nguyên bạn muốn fetch. Giá trị này có thể là:
- Một chuỗi chứa URL của tài nguyên muốn fetch. URL có thể là tương đối với base URL, tức
baseURIcủa tài liệu trong ngữ cảnh cửa sổ, hoặcWorkerGlobalScope.locationtrong ngữ cảnh worker. - Một đối tượng
Request, về thực chất là tạo một bản sao. Lưu ý các cập nhật hành vi sau để giữ an toàn và giảm khả năng ném ngoại lệ:- Nếu đối tượng này thuộc origin khác với lời gọi constructor,
Request.referrersẽ bị loại bỏ. - Nếu đối tượng này có
Request.modelànavigate, giá trịmodesẽ được chuyển thànhsame-origin.
- Nếu đối tượng này thuộc origin khác với lời gọi constructor,
- Một chuỗi chứa URL của tài nguyên muốn fetch. URL có thể là tương đối với base URL, tức
optionsOptional-
Một đối tượng
RequestInitchứa các thiết lập tùy chỉnh bạn muốn áp dụng cho request.Nếu bạn tạo một
Requestmới từ mộtRequestcó sẵn, mọi tùy chọn bạn đặt trong đối số options của request mới sẽ thay thế các tùy chọn tương ứng trongRequestgốc. Ví dụ:jsconst oldRequest = new Request( "https://github.com/mdn/content/issues/12959", { headers: { From: "webmaster@example.org" } }, ); oldRequest.headers.get("From"); // "webmaster@example.org" const newRequest = new Request(oldRequest, { headers: { From: "developer@example.org" }, }); newRequest.headers.get("From"); // "developer@example.org"
Ngoại lệ
NotAllowedErrorDOMException-
Được ném ra nếu:
- Việc dùng Topics API bị cấm rõ ràng bởi Permissions Policy
browsing-topics, vàbrowsingTopicsđược đặt làtrue. - Việc dùng các thao tác Private State Token API bị cấm rõ ràng bởi Permissions Policy
private-state-token-issuancehoặcprivate-state-token-redemption, và tùy chọnprivateTokenđược chỉ định, bao gồm một kiểuprivateToken.operationkhông được phép.
- Việc dùng Topics API bị cấm rõ ràng bởi Permissions Policy
TypeError-
Được ném ra nếu:
- URL có thông tin xác thực, như
http://user:password@example.com, hoặc không thể phân tích cú pháp. - Tùy chọn init
privateTokenđược chỉ định, bao gồm kiểuprivateToken.operationlàsend-redemption-record, và mảngprivateToken.issuesrỗng hoặc không được đặt, hoặc một hay nhiềuissuersđược chỉ định không đáng tin cậy, là các URL HTTPS.
- URL có thông tin xác thực, như
Ví dụ
Trong ví dụ Fetch Request của chúng tôi, chúng ta tạo một đối tượng Request mới bằng constructor rồi fetch nó bằng lời gọi fetch().
Vì chúng ta đang fetch một ảnh, chúng ta chạy Response.blob trên response để gán đúng kiểu MIME, sau đó tạo một Object URL và hiển thị nó trong phần tử <img>.
const myImage = document.querySelector("img");
const myRequest = new Request("flowers.jpg");
fetch(myRequest)
.then((response) => response.blob())
.then((response) => {
const objectURL = URL.createObjectURL(response);
myImage.src = objectURL;
});
Trong ví dụ Fetch Request với init của chúng tôi, chúng ta làm tương tự nhưng truyền vào một object options khi gọi fetch().
Trong trường hợp này, chúng ta có thể đặt giá trị Cache-Control để chỉ ra loại phản hồi cache nào là chấp nhận được:
const myImage = document.querySelector("img");
const reqHeaders = new Headers();
// Phản hồi đã cache là chấp nhận được nếu nó chưa quá một tuần.
reqHeaders.set("Cache-Control", "max-age=604800");
const options = {
headers: reqHeaders,
};
// truyền init như một object "options" cùng với headers của chúng ta
const req = new Request("flowers.jpg", options);
fetch(req).then((response) => {
// …
});
Lưu ý rằng bạn cũng có thể truyền options vào lời gọi fetch để có hiệu ứng tương tự, ví dụ:
fetch(req, options).then((response) => {
// …
});
Bạn cũng có thể dùng một object literal làm headers trong options.
const options = {
headers: {
"Cache-Control": "max-age=60480",
},
};
const req = new Request("flowers.jpg", options);
Bạn cũng có thể truyền một đối tượng Request vào constructor Request() để tạo một bản sao của Request (điều này tương tự với việc gọi phương thức clone().)
const copy = new Request(req);
Note: Cách dùng cuối cùng này có lẽ chỉ hữu ích trong ServiceWorkers.
Thông số kỹ thuật
| Thông số kỹ thuật |
|---|
| Fetch> # ref-for-dom-request①> |