有個(gè)同事使用了axios設(shè)置了Xhr的超時(shí)時(shí)間,她說(shuō)默認(rèn)的是30秒。
XMLHttpRequest.timeout 是一個(gè)無(wú)符號(hào)長(zhǎng)整型數(shù),代表著一個(gè)請(qǐng)求在被自動(dòng)終止前所消耗的毫秒數(shù)。默認(rèn)值為 0均牢,意味著沒有超時(shí)。超時(shí)并不應(yīng)該用在一個(gè) document environment 中的同步 XMLHttpRequests 請(qǐng)求中才睹,否則將會(huì)拋出一個(gè) InvalidAccessError 類型的錯(cuò)誤徘跪。當(dāng)超時(shí)發(fā)生甘邀, timeout 事件將會(huì)被觸發(fā)。
有時(shí)垮庐,ajax操作很耗時(shí)松邪,而且無(wú)法預(yù)知要花多少時(shí)間。如果網(wǎng)速很慢突硝,用戶可能要等很久测摔。新版本的XMLHttpRequest對(duì)象,增加了timeout屬性解恰,可以設(shè)置HTTP請(qǐng)求的時(shí)限锋八。
xhr.timeout = 3000;
上面的語(yǔ)句,將最長(zhǎng)等待時(shí)間設(shè)為3000毫秒护盈。過(guò)了這個(gè)時(shí)限挟纱,就自動(dòng)停止HTTP請(qǐng)求。與之配套的還有一個(gè)timeout事件腐宋,用來(lái)指定回調(diào)函數(shù)紊服。
xhr.ontimeout = function(event){
alert('請(qǐng)求超時(shí)!');
}
在web超時(shí)配置總結(jié)
值得注意的一點(diǎn)是胸竞,超時(shí)時(shí)間的計(jì)算欺嗤,是從調(diào)用xhr.send()開始,至xhr.loadend觸發(fā)為止的這段時(shí)間卫枝。即時(shí)xhr.timeout的設(shè)置是在xhr.send()之后煎饼,timeout的計(jì)時(shí)起點(diǎn)仍為調(diào)用xhr.send()的時(shí)刻。
其實(shí)會(huì)了XMLHttpRequest的超時(shí)設(shè)置校赤,其他前端的框架啊吆玖、工具啊的超時(shí)設(shè)置都不再是問(wèn)題,這就有點(diǎn)萬(wàn)法歸宗的意思马篮。因?yàn)槲覀兂S玫膉Query.ajax()方法實(shí)際上就是對(duì)瀏覽器提供的XMLHttpRequest對(duì)象的封裝沾乘。而又有很多其他框架或者工具的請(qǐng)求模塊是對(duì)jQuery.ajax()的封裝。說(shuō)到底浑测,都是依賴的XMLHttpRequest對(duì)象翅阵。因此掌握了XMLHttpRequest,其他都很好學(xué)會(huì)迁央。
依jQuery.ajax()的超時(shí)設(shè)置為例:
$.ajax({
url: "test.html",
error: function(){
// will fire when timeout is reached
},
success: function(){
// do something
},
timeout: 60*1000 // sets timeout to 1 minute
});
另外還有設(shè)置nginx代理超時(shí)設(shè)置、服務(wù)端超時(shí)設(shè)置漱贱。