@@ -50,17 +50,23 @@ export default Ember.Mixin.create({
5050 let msg = 'The Service responded with a ' + resp . status + ' error.' ;
5151 reject ( new ServerError ( msg , resp ) ) ;
5252 } else if ( resp . status >= 400 ) {
53- resp . json ( ) . then ( function ( _resp ) {
54- let msg = 'The API responded with a ' + resp . status + ' error.' ;
55- reject ( new ClientError ( msg , _resp ) ) ;
53+ resp . text ( ) . then ( function ( _resp ) {
54+ let json , msg = 'The API responded with a ' + resp . status + ' error.' ;
55+ try {
56+ json = JSON . parse ( _resp ) ;
57+ } catch ( e ) {
58+ Ember . Logger . error ( e ) ;
59+ json = { "errors" : [ { "status" : resp . status } ] } ;
60+ }
61+ reject ( new ClientError ( msg , json ) ) ;
5662 } ) ;
5763 } else if ( resp . status === 204 ) {
5864 resolve ( '' ) ;
5965 } else {
6066 return resp . json ( ) . then ( function ( json ) {
6167 if ( isUpdate ) {
62- _this . cacheUpdate ( { meta : json . meta , data : json . data , headers : resp . headers } ) ;
6368 json . data = _this . serializer . transformAttributes ( json . data ) ;
69+ _this . cacheUpdate ( { meta : json . meta , data : json . data , headers : resp . headers } ) ;
6470 resolve ( json . data ) ;
6571 } else {
6672 let resource = _this . serializer . deserialize ( json ) ;
@@ -99,8 +105,8 @@ export default Ember.Mixin.create({
99105 } else {
100106 let headers = _this . _getAjaxHeaders ( jqXHR ) ;
101107 if ( isUpdate ) {
102- _this . cacheUpdate ( { meta : json . meta , data : json . data , headers : headers } ) ;
103108 json . data = _this . serializer . transformAttributes ( json . data ) ;
109+ _this . cacheUpdate ( { meta : json . meta , data : json . data , headers : headers } ) ;
104110 resolve ( json . data ) ;
105111 } else {
106112 let resource = _this . serializer . deserialize ( json ) ;
@@ -116,7 +122,11 @@ export default Ember.Mixin.create({
116122 reject ( new ServerError ( msg , jqXHR . responseJSON || jqXHR . responseText ) ) ;
117123 } else if ( jqXHR . status >= 400 ) {
118124 msg = 'The API responded with a ' + jqXHR . status + ' error.' ;
119- reject ( new ClientError ( msg , jqXHR . responseJSON || jqXHR . responseText ) ) ;
125+ let json = jqXHR . responseJSON ;
126+ if ( ! json ) {
127+ json = { "errors" : [ { "status" : jqXHR . status , "detail" : jqXHR . responseText } ] } ;
128+ }
129+ reject ( new ClientError ( msg , json ) ) ;
120130 } else {
121131 msg = ( errorThrown ) ? errorThrown : 'Unable to Fetch resource(s)' ;
122132 reject ( new FetchError ( msg , {
0 commit comments