/** * @class Ext.direct.JsonProvider * @extends Ext.direct.Provider A base provider for communicating using JSON. This is an abstract class and should not be instanced directly. * @markdown * @abstract */ Ext.define('Ext.direct.JsonProvider', { /* Begin Definitions */ extend: 'Ext.direct.Provider', alias: 'direct.jsonprovider', uses: ['Ext.direct.ExceptionEvent'], /* End Definitions */ /** * Parse the JSON response * @private * @param {Object} response The XHR response object * @return {Object} The data in the response. */ parseResponse: function(response){ if (!Ext.isEmpty(response.responseText)) { if (Ext.isObject(response.responseText)) { return response.responseText; } return Ext.decode(response.responseText); } return null; }, /** * Creates a set of events based on the XHR response * @private * @param {Object} response The XHR response * @return {Ext.direct.Event[]} An array of Ext.direct.Event */ createEvents: function(response){ var data = null, events = [], event, i = 0, len; try{ data = this.parseResponse(response); } catch(e) { event = Ext.create('Ext.direct.ExceptionEvent', { data: e, xhr: response, code: Ext.direct.Manager.self.exceptions.PARSE, message: 'Error parsing json response: \n\n ' + data }); return [event]; } if (Ext.isArray(data)) { for (len = data.length; i < len; ++i) { events.push(this.createEvent(data[i])); } } else { events.push(this.createEvent(data)); } return events; }, /** * Create an event from a response object * @param {Object} response The XHR response object * @return {Ext.direct.Event} The event */ createEvent: function(response){ return Ext.create('direct.' + response.type, response); } });