これは私のコードです。
var xhr = new XMLHttpRequest();
xhr.open('GET',window.location.href, true);
xhr.responseType = "arraybuffer";
xhr.onload = function(event) {
debugger;
console.log(" coverting array buffer to string ");
alert(String.fromCharCode.apply(null, new Uint8Array(this.response)));
};
xhr.send();
そのリクエストはPDF URLのサイズは約3MBです。同じエラーでいくつかのスレッドを読みました最大呼び出しスタックサイズを超えました、再帰呼び出しがあるはずですが、ここには再帰呼び出しがありません。誰か助けてもらえますか?
このエラーは、関数の引数の数の制限が原因で発生します。 "RangeError:最大呼び出しスタックサイズを超えました"なぜですか? を参照してください。
String.fromCharCode.apply()
の代わりに、eを使用します。 g。 TextEncoder
。 Javascriptの文字列へのUint8Array を参照してください
this.response.arrayBuffer()
.then((buf) => {
const uint8Array = new Uint8Array(buf);
const data = uint8Array.reduce((acc, i) => acc += String.fromCharCode.apply(null, [i]), '');
return data;
})
私は同じ問題を抱えていて、ついに使用しました このコード :
function _arrayBufferToBase64( buffer ) {
var binary = '';
var bytes = new Uint8Array( buffer );
var len = bytes.byteLength;
for (var i = 0; i < len; i++) {
binary += String.fromCharCode( bytes[ i ] );
}
return window.btoa( binary );
}