XMLHttpRequest.responseType ie InvalidStateError

XMLHttpRequest.responseType 允許我們手動(dòng)的設(shè)置返回?cái)?shù)據(jù)的類型,如果服務(wù)器所返回的類型和你所設(shè)置的返回值類型不兼容,response為 null,即使服務(wù)器返回了數(shù)據(jù)。


1642063389(1).jpg

服務(wù)器返回了數(shù)據(jù),Content-Type 為 application/octet-stream


1642063520(1).jpg

1642063718(1).jpg

還有一個(gè)要注意的是,給一個(gè)同步請(qǐng)求設(shè)置responseType會(huì)拋出一個(gè)InvalidAccessError 的異常。
ie瀏覽器 xmlhttp.responseType = "blob" 放在 xmlhttp.open 前面會(huì)報(bào)錯(cuò) (谷歌不會(huì))

報(bào)錯(cuò)圖片


error.jpg

報(bào)錯(cuò)代碼

error-code.jpg

不報(bào)錯(cuò)圖片


1642062287(1).jpg

正確代碼

1642062515(1).jpg

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<video id="video" src="/ff7bb04b22364c0d97a3ba9703ffcdd9/file" controls width="400" height="400" >
</video>
<script>

  var xmlhttp=new XMLHttpRequest()
  xmlhttp.onreadystatechange=state_Change;
  
  xmlhttp.open("GET",'/ff7bb04b22364c0d97a3ba9703ffcdd9/file',true);
  xmlhttp.responseType = "blob"
  xmlhttp.send(null)
  function state_Change() {
  if (xmlhttp.readyState==4) {// 4 = "loaded"
    if (xmlhttp.status==200) {// 200 = OK
      console.log(xmlhttp);
      var video = document.querySelector('#video')
      console.log(new Blob([xmlhttp.response], {type: 'video/mp4'}));
      var src = window.URL.createObjectURL(new Blob([xmlhttp.response], {type: 'video/mp4'}));
      video.src = src
        video.onload = function() {
          window.URL.revokeObjectURL(src);
        }
      } else{
        alert("Problem retrieving XML data");
      }
    }
  }
</script>

</body>
</html>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容