diff --git a/fetch.js b/fetch.js index 29c985942f4c151836cb7467694a506a10b154b8..104d873851eff73bd95482cfd4105ecd1264a5a0 100644 --- a/fetch.js +++ b/fetch.js @@ -186,6 +186,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) @@ -260,9 +270,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 3044b94e9258961c42cca0bf52c9b7a9bd1c0032..e1b2270fc1853a18767da2f23ed9dbaabe4a740b 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 native = {}