掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
fetch是一種HTTP數(shù)據(jù)請(qǐng)求的方式,是XMLHttpRequest的一種替代方案。fetch不是ajax的進(jìn)一步封裝,而是原生js。Fetch函數(shù)就是原生js,沒(méi)有使用XMLHttpRequest對(duì)象。

使用步驟 1.創(chuàng)建XmlHttpRequest對(duì)象 2.調(diào)用open方法設(shè)置基本請(qǐng)求信息 3.設(shè)置發(fā)送的數(shù)據(jù),發(fā)送請(qǐng)求 4.注冊(cè)監(jiān)聽(tīng)的回調(diào)函數(shù) 5.拿到返回值,對(duì)頁(yè)面進(jìn)行更新
//1.創(chuàng)建Ajax對(duì)象
if(window.XMLHttpRequest){
var oAjax=new XMLHttpRequest();
}else{
var oAjax=new ActiveXObject("Microsoft.XMLHTTP");
}
//2.連接服務(wù)器(打開(kāi)和服務(wù)器的連接)
oAjax.open('GET', url, true);
//3.發(fā)送
oAjax.send();
//4.接收
oAjax.onreadystatechange=function (){
if(oAjax.readyState==4){
if(oAjax.status==200){
//alert('成功了:'+oAjax.responseText);
fnSucc(oAjax.responseText);
}else{
//alert('失敗了');
if(fnFaild){
fnFaild();
}
}
}
};
特點(diǎn) 1、第一個(gè)參數(shù)是URL: 2、第二個(gè)是可選參數(shù),可以控制不同配置的 init 對(duì)象 3、使用了 JavaScript Promises 來(lái)處理結(jié)果/回調(diào):
fetch(url).then(response => response.json())
.then(data => console.log(data))
.catch(e => console.log("Oops, error", e))
更酷的一點(diǎn) 你可以通過(guò)Request構(gòu)造器函數(shù)創(chuàng)建一個(gè)新的請(qǐng)求對(duì)象,你還可以基于原有的對(duì)象創(chuàng)建一個(gè)新的對(duì)象。 新的請(qǐng)求和舊的并沒(méi)有什么不同,但你可以通過(guò)稍微調(diào)整配置對(duì)象,將其用于不同的場(chǎng)景。例如:
var req = new Request(URL, {method: 'GET', cache: 'reload'});
fetch(req).then(function(response) {
return response.json();
}).then(function(json) {
insertPhotos(json);
});
上面的代碼中我們指明了請(qǐng)求使用的方法為GET,并且指定不緩存響應(yīng)的結(jié)果,你可以基于原有的GET請(qǐng)求創(chuàng)建一個(gè)POST請(qǐng)求,它們具有相同的請(qǐng)求源。代碼如下:
// 基于req對(duì)象創(chuàng)建新的postReq對(duì)象
var postReq = new Request(req, {method: 'POST'});
1、fetch()返回的promise將不會(huì)拒絕http的錯(cuò)誤狀態(tài),即使響應(yīng)是一個(gè)HTTP 404或者500 2、在默認(rèn)情況下 fetch不會(huì)接受或者發(fā)送cookies

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流