diff --git a/fetch.js b/fetch.js index 06867998..3fb6c5fc 100644 --- a/fetch.js +++ b/fetch.js @@ -178,6 +178,16 @@ return promise } + function readArrayBufferAsText(buf) { + var view = new Uint8Array(buf) + var chars = new Array(view.length) + + for (var i = 0; i < view.length; i++) { + chars[i] = String.fromCharCode(view[i]) + } + return chars.join('') + } + function bufferClone(buf) { if (buf.slice) { return buf.slice(0) @@ -252,9 +262,7 @@ if (this._bodyBlob) { return readBlobAsText(this._bodyBlob) } else if (this._bodyArrayBuffer) { - var view = new Uint8Array(this._bodyArrayBuffer) - var str = String.fromCharCode.apply(null, view) - return Promise.resolve(str) + return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer)) } else if (this._bodyFormData) { throw new Error('could not read FormData body as text') } else { diff --git a/test/test.js b/test/test.js index c6d53e5a..c24745d1 100644 --- a/test/test.js +++ b/test/test.js @@ -64,7 +64,13 @@ function arrayBufferFromText(text) { } function readArrayBufferAsText(buf) { - return String.fromCharCode.apply(null, new Uint8Array(buf)) + var view = new Uint8Array(buf) + var chars = new Array(view.length) + + for (var i = 0; i < view.length; i++) { + chars[i] = String.fromCharCode(view[i]) + } + return chars.join('') } var preservedGlobals = {}