XHR對象send方法的同異步問題

2024-03-02    分類: 網(wǎng)站建設(shè)

  XHR對象上的send方法不僅是用于發(fā)送數(shù)據(jù)部分,只有調(diào)用了send方法,整個HTTP請求頭才會被發(fā)出,然后才是真正的內(nèi)容部分。如此復(fù)雜的過程在規(guī)范中也沒有具體的定義,所以目前各大瀏覽器上的實現(xiàn)都存在細微的差異,特別是同異步這個大坑再次中槍。 一個精密的實驗   其實我以前一直以為send方法總是同步發(fā)起的(注意這里討論的是“發(fā)起”這個行為本身的同異步,open方法的第三個參數(shù)始終為true,不討論false的情況),還在討論同異步的文章中使用了XHR對象的例子,現(xiàn)在看來確實是個不恰當(dāng)?shù)睦?。在一些瀏覽器中XHR對象的send方法確實是同步發(fā)起的,但并不是所有瀏覽器都這樣,可以通過下面的實驗來證實(NodeJS 的部分需要 harmony 和 use_strict): //nodejs require('http').createServer(function(request,response){ response.setHeader('Content-Type','text/html'); if(request.url=='/test'){ console.log(request.url); let connection=request.connection; connection.write('HTTP/1.1 100 Continue\n\n'); console.log(100); request.on('data',function(e){ console.log(e+""); response.end('ok'); }); }else{ let path=process.cwd()+request.url; require('fs').readFile(path,function(error,data){ response.end(error?'error':data); }); }; }).listen(1234);   這個測試在三大主流瀏覽器上測試會得到三個不同的結(jié)果: Chrome39:請求同步發(fā)出,死循環(huán)不會影響請求 Firefox33:請求被注冊到下一個消息中異步發(fā)出 IE11:請求的頭部分同步發(fā)出,內(nèi)容部分被注冊到下一個消息中異步發(fā)出 實驗結(jié)果影響的現(xiàn)實   這個結(jié)果對實際運用有什么影響呢?在同步過程中多次調(diào)用open方法就能看出差異。XHR對象在調(diào)用open方法時會停止原來的工作,于是有以下幾種情況: Chrome的send是同步發(fā)出的,即使在send之后馬上調(diào)用open也無法停止已經(jīng)send的東西了,已經(jīng)潑出去的水,根本停不下來。 Firefox就完全不同,由于是注冊到下一個消息中,send后馬上調(diào)用open就會取消掉原先注冊但還沒執(zhí)行到的動作。 IE比較奇葩,在調(diào)動send時頭已經(jīng)發(fā)出了,這部分是收不回來的。send后馬上調(diào)用open只能阻止內(nèi)容部分的發(fā)出。 本文來源于成都網(wǎng)站建設(shè)公司與成都網(wǎng)站設(shè)計制作公司-創(chuàng)新互聯(lián)成都公司!

文章標題:XHR對象send方法的同異步問題
標題網(wǎng)址:http://www.muchs.cn/news14/319814.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)微信小程序、小程序開發(fā)、手機網(wǎng)站建設(shè)、網(wǎng)站設(shè)計面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計公司