fix(AjaxStream): Parse json response on error
This commit is contained in:
		| @@ -64,11 +64,27 @@ function getCORSRequest() { | |||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | function parseXhrResponse(responseType, xhr) { | ||||||
|  |   switch (responseType) { | ||||||
|  |     case 'json': | ||||||
|  |       if ('response' in xhr) { | ||||||
|  |         return xhr.responseType ? | ||||||
|  |           xhr.response : | ||||||
|  |           JSON.parse(xhr.response || xhr.responseText || 'null'); | ||||||
|  |       } else { | ||||||
|  |         return JSON.parse(xhr.responseText || 'null'); | ||||||
|  |       } | ||||||
|  |     case 'xml': | ||||||
|  |       return xhr.responseXML; | ||||||
|  |     case 'text': | ||||||
|  |     default: | ||||||
|  |       return ('response' in xhr) ? xhr.response : xhr.responseText; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
| function normalizeAjaxSuccessEvent(e, xhr, settings) { | function normalizeAjaxSuccessEvent(e, xhr, settings) { | ||||||
|   var response = ('response' in xhr) ? xhr.response : xhr.responseText; |  | ||||||
|   response = settings.responseType === 'json' ? JSON.parse(response) : response; |  | ||||||
|   return { |   return { | ||||||
|     response: response, |     response: parseXhrResponse(settings.responseType || xhr.responseType, xhr), | ||||||
|     status: xhr.status, |     status: xhr.status, | ||||||
|     responseType: xhr.responseType, |     responseType: xhr.responseType, | ||||||
|     xhr: xhr, |     xhr: xhr, | ||||||
| @@ -266,7 +282,8 @@ export function postJSON$(url, body) { | |||||||
|     headers: { |     headers: { | ||||||
|       'Content-Type': 'application/json', |       'Content-Type': 'application/json', | ||||||
|       Accept: 'application/json' |       Accept: 'application/json' | ||||||
|     } |     }, | ||||||
|  |     normalizeError: (e, xhr) => parseXhrResponse('json', xhr) | ||||||
|   }) |   }) | ||||||
|     .map(({ response }) => response); |     .map(({ response }) => response); | ||||||
| } | } | ||||||
| @@ -291,6 +308,7 @@ export function getJSON$(url) { | |||||||
|     headers: { |     headers: { | ||||||
|       'Content-Type': 'application/json', |       'Content-Type': 'application/json', | ||||||
|       Accept: 'application/json' |       Accept: 'application/json' | ||||||
|     } |     }, | ||||||
|  |     normalizeError: (e, xhr) => parseXhrResponse('json', xhr) | ||||||
|   }).map(({ response }) => response); |   }).map(({ response }) => response); | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user