web-dev-qa-db-ja.com

arraybufferをstringに変換しています:最大呼び出しスタックサイズを超えました

これは私のコードです。

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です。同じエラーでいくつかのスレッドを読みました最大呼び出しスタックサイズを超えました、再帰呼び出しがあるはずですが、ここには再帰呼び出しがありません。誰か助けてもらえますか?

10
Suresh Atta

このエラーは、関数の引数の数の制限が原因で発生します。 "RangeError:最大呼び出しスタックサイズを超えました"なぜですか? を参照してください。

String.fromCharCode.apply()の代わりに、eを使用します。 g。 TextEncoderJavascriptの文字列へのUint8Array を参照してください

10
le_m
this.response.arrayBuffer()
              .then((buf) => {
                const uint8Array = new Uint8Array(buf);
                const data = uint8Array.reduce((acc, i) => acc += String.fromCharCode.apply(null, [i]), '');
                return data;
              })
0
Igor Janenko

私は同じ問題を抱えていて、ついに使用しました このコード

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 );
}
0
Anthony O.