From 08b109b2a11b5046882e9fe3ad380a08a4bf32a7 Mon Sep 17 00:00:00 2001 From: thepassle Date: Thu, 6 Jul 2023 11:38:27 +0200 Subject: [PATCH] fix: avoid JSON.parsing empty responses --- packages/ajax/src/Ajax.js | 6 ++++-- packages/ajax/test/Ajax.test.js | 7 +++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/ajax/src/Ajax.js b/packages/ajax/src/Ajax.js index bce865dd6..4b6e5e1a1 100644 --- a/packages/ajax/src/Ajax.js +++ b/packages/ajax/src/Ajax.js @@ -193,9 +193,11 @@ export class Ajax { /** @type {any} */ let body = responseText; + if ( - !response.headers.get('content-type') || - response.headers.get('content-type')?.includes('json') + body.length && + (!response.headers.get('content-type') || + response.headers.get('content-type')?.includes('json')) ) { try { body = JSON.parse(responseText); diff --git a/packages/ajax/test/Ajax.test.js b/packages/ajax/test/Ajax.test.js index 2c7f46d32..1a4b88c45 100644 --- a/packages/ajax/test/Ajax.test.js +++ b/packages/ajax/test/Ajax.test.js @@ -221,6 +221,13 @@ describe('Ajax', () => { } expect(thrown).to.be.true; }); + + it('doesnt throw on empty response', async () => { + fetchStub.returns(Promise.resolve(new Response('', responseInit()))); + + const { response } = await ajax.fetchJson('/foo'); + expect(response.ok); + }); }); describe('request and response interceptors', () => {