File tree 3 files changed +24
-7
lines changed
3 files changed +24
-7
lines changed Original file line number Diff line number Diff line change
1
+ @ngdoc error
2
+ @name $http:baddata
3
+ @fullName Bad JSON Data
4
+ @description
5
+
6
+ The default @{link ng.$http#default-transformations `transformResponse`} will try to parse the
7
+ response as JSON if the `Content-Type` header is `application/json` or the response looks like a
8
+ valid JSON-stringified object or array.
9
+ This error occurs when that data is not a valid JSON object.
10
+
11
+ The error message should provide additional context such as the actual response.
12
+
13
+ To resolve this error, make sure you pass valid JSON data to `transformResponse` or use an
14
+ appropriate `Content-Type` header for non-JSON data.
Original file line number Diff line number Diff line change @@ -138,7 +138,12 @@ function defaultHttpResponseTransform(data, headers) {
138
138
if ( tempData ) {
139
139
var contentType = headers ( 'Content-Type' ) ;
140
140
if ( ( contentType && ( contentType . indexOf ( APPLICATION_JSON ) === 0 ) ) || isJsonLike ( tempData ) ) {
141
- data = fromJson ( tempData ) ;
141
+ try {
142
+ data = fromJson ( tempData ) ;
143
+ } catch ( e ) {
144
+ throw $httpMinErr ( 'baddata' , 'Data must be a valid JSON object. Received: "{0}". ' +
145
+ 'Parse error: "{1}"' , data , e ) ;
146
+ }
142
147
}
143
148
}
144
149
}
Original file line number Diff line number Diff line change @@ -1369,17 +1369,15 @@ describe('$http', function() {
1369
1369
}
1370
1370
) ;
1371
1371
1372
- it ( 'should forward json deserialization errors to the http error handler' ,
1373
- function ( ) {
1372
+ it ( 'should return JSON data with error message if JSON is invalid' , function ( ) {
1374
1373
var errCallback = jasmine . createSpy ( 'error' ) ;
1375
-
1376
- $httpBackend . expect ( 'GET' , '/url' ) . respond ( 'abcd' , { 'Content-Type' : 'application/json' } ) ;
1377
- $http ( { method : 'GET' , url : '/url' } ) . then ( callback ) . catch ( errCallback ) ;
1374
+ $httpBackend . expect ( 'GET' , '/url' ) . respond ( '{abcd}' , { 'Content-Type' : 'application/json' } ) ;
1375
+ $http . get ( '/url' ) . then ( callback ) . catch ( errCallback ) ;
1378
1376
$httpBackend . flush ( ) ;
1379
1377
1380
1378
expect ( callback ) . not . toHaveBeenCalled ( ) ;
1381
1379
expect ( errCallback ) . toHaveBeenCalledOnce ( ) ;
1382
- expect ( errCallback . calls . mostRecent ( ) . args [ 0 ] ) . toEqual ( jasmine . any ( SyntaxError ) ) ;
1380
+ expect ( errCallback . calls . mostRecent ( ) . args [ 0 ] ) . toEqualMinErr ( '$http' , 'baddata' ) ;
1383
1381
} ) ;
1384
1382
1385
1383
} ) ;
You can’t perform that action at this time.
0 commit comments