Body接口:Request()構(gòu)造函數(shù)

2018-01-30 10:45 更新

Request()構(gòu)造函數(shù)

在Body接口中,該Request()構(gòu)造函數(shù)用來創(chuàng)建一個新的Request對象。

Request() 語法

var myRequest = new Request(input,init);

Request() 參數(shù)

input
定義您想要獲取的資源。這可以是:
  • 一個USVString包含要獲取資源的直接URL。
  • 一個Request對象,有效地創(chuàng)建一個副本。請注意以下操作更新以保持安全性,同時使構(gòu)造函數(shù)不太可能拋出異常:
    • 如果這個對象存在于構(gòu)造函數(shù)調(diào)用的另一個起源中,則將Request.referrer除去。
    • 如果該對象具有navigateRequest.mode,該mode值被轉(zhuǎn)換為same-origin。
init(可選的)
包含要應(yīng)用于請求的任何自定義設(shè)置的選項對象??赡艿倪x項是:
  • method:請求方法,例如GET,POST。
  • headers:你想添加到你的請求的任何頭文件,包含在一個Headers對象或帶有ByteString值的對象文本中。
  • body:您要添加到您的請求的任何body:這可以是一個BlobBufferSource,FormData,URLSearchParamsUSVStringReadableStream對象。請注意,使用GET或者HEAD方法的請求不能有一個主體。
  • mode:您要使用該請求的模式,例如cors,no-cors,same-originnavigate,默認(rèn)是cors。在Chrome中,默認(rèn)情況下是no-cors在Chrome 47之前,same-origin從Chrome 47開始。
  • credentials:請求憑據(jù)要使用的要求:omit,same-origininclude。默認(rèn)是omit。在Chrome中,默認(rèn)情況下是same-origin在Chrome 47之前,從Chrome 47開始默認(rèn)為include。
  • cache:您想要用于請求的緩存模式。
  • redirect:要使用的Redirect方式:follow,errormanual。在Chrome中,默認(rèn)情況下是manual在Chrome 47之前,從Chrome 47開始默認(rèn)為follow。
  • referrerUSVString指定no-referrer,client或URL;默認(rèn)是client。
  • integrity:包含請求的子資源完整性值(例如,sha256-BpfBw7ivV8q2jLiT13fxDYAe2tJllusRSZ273h2nFSE=)。

異常錯誤

類型 描述
TypeError 自Firefox 43以來,如果URL具有證書(如http:// user:password@example.com),Request()將會引發(fā)TypeError。

Request() 構(gòu)造函數(shù)示例

在我們的Fetch Request示例中(請參閱“Fetch Request live”),我們使用構(gòu)造函數(shù)創(chuàng)建一個新的Request對象,然后使用GlobalFetch.fetch調(diào)用來獲取它。由于我們正在獲取圖像,因此我們在響應(yīng)上運行Body.blob以提供適當(dāng)?shù)腗IME類型,以便正確處理,然后創(chuàng)建一個Object URL并將其顯示在<img>元素中。

var myImage = document.querySelector('img');

var myRequest = new Request('flowers.jpg');

fetch(myRequest).then(function(response) {
  return response.blob();
}).then(function(response) {
  var objectURL = URL.createObjectURL(response);
  myImage.src = objectURL;
});

在我們的帶有init例子的Fetch Request中(請參閱Fetch Request init live),我們做同樣的事情,只不過我們在調(diào)用fetch()時傳入init對象:

var myImage = document.querySelector('img');

var myHeaders = new Headers();
myHeaders.append('Content-Type', 'image/jpeg');

var myInit = { method: 'GET',
               headers: myHeaders,
               mode: 'cors',
               cache: 'default' };

var myRequest = new Request('flowers.jpg',myInit);

fetch(myRequest).then(function(response) {
  ... 
});

請注意,您也可以將init對象傳遞給fetch調(diào)用以獲得相同的效果,例如:

fetch(myRequest,myInit).then(function(response) {
  ...
});

您還可以在init中使用對象文本作為headers。

var myInit = { method: 'GET',
               headers: {
                   'Content-Type': 'image/jpeg'
               },
               mode: 'cors',
               cache: 'default' };

var myRequest = new Request('flowers.jpg', myInit);

您也可以將一個Request對象傳遞給Request()構(gòu)造函數(shù)來創(chuàng)建請求的副本(這與調(diào)用clone()方法類似)。

var copy = new Request(myRequest);

注意:這最后一個用法可能只在ServiceWorkers中有用。

規(guī)范

規(guī)范 狀態(tài) 注釋
Fetch
在該說明書中“Request()”的定義。
Living Standard
 

瀏覽器兼容性

  • 電腦端
Feature
Chrome
Firefox(Gecko)
Edge
Opera
Safari(WebKit)
基本的支持
支持:42.0 [1] 
 
支持:39[2] 支持:15

支持:29 [3]

支持:10.1
body 可以是 ReadableStream 支持:43.0 不支持[4] 支持:15 支持:10.1
navigate 模式 支持:49.0 支持:46 支持:15 (是) 支持:10.1
referrer init選項 ? 支持:47 支持:15 (是) 支持:10.1
從現(xiàn)有Request對象創(chuàng)建構(gòu)造函數(shù)時,跨源referrer剝離和navigate模式被轉(zhuǎn)換為same-origin。 (是) 支持:54 支持:15 (是) 支持:10.1
  • 移動端
Feature Android Android Webview Firefox Mobile (Gecko) Edge Opera Mobile Safari Mobile Chrome for Android
基本的支持 不支持 支持:42 [1] (是) 支持:15 不支持
支持:10.3 支持:42.0 [1]
body可以是ReadableStream 不支持
支持:43.0  不支持[4] 支持:15 ? 支持:10.3 支持:43.0 
navigate模式 不支持
不支持 (是) 支持:15 不支持
支持:10.3 支持:49.0 
referrer init 選項 不支持
(是) (是) 支持:15 ? 支持:10.3 (是)
跨源referrer剝離和 navigate模式被轉(zhuǎn)換為 same-origin,當(dāng)從現(xiàn)有的Request對象創(chuàng)建構(gòu)造函數(shù)。 不支持
(是) (是) 支持:15 ? 支持:10.3 (是)

[1] 在Chrome 47中初始化參數(shù)的某些默認(rèn)值已更改。有關(guān)詳細(xì)信息,請參閱“屬性(Properties)”部分。

[2]在版本34的首選項后。 

[3]在版本28的首選項后。 

[4]可讀流當(dāng)前在Firefox中啟用,但隱藏在dom.streams.enabled和javascript.options.streamsprefs 后面。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號