/** * @class Ext.direct.JsonProvider * * JSONを使用して通信するための基底プロバイダ。抽象クラスであり、直接インスタンス化されません。 * @abstract */ Ext.define('Ext.direct.JsonProvider', { extend: 'Ext.direct.Provider', alias: 'direct.jsonprovider', uses: ['Ext.direct.ExceptionEvent'], /** * JSONレスポンスを解析します。 * @private * @param {Object} response XHRレスポンスオブジェクト。 * @return {Object} レスポンス内のデータ。 */ parseResponse: function(response) { if (!Ext.isEmpty(response.responseText)) { if (Ext.isObject(response.responseText)) { return response.responseText; } return Ext.decode(response.responseText); } return null; }, /** * XHRレスポンスに基づくイベントのセットを生成します。 * @private * @param {Object} response XHRレスポンス。 * @return {Ext.direct.Event[]} {@link Ext.direct.Event}オブジェクトの配列。 */ createEvents: function(response) { var data = null, events = [], i = 0, ln, event; try { data = this.parseResponse(response); } catch(e) { event = Ext.create('Ext.direct.ExceptionEvent', { data: e, xhr: response, code: Ext.direct.Manager.exceptions.PARSE, message: 'Error parsing json response: \n\n ' + data }); return [event]; } if (Ext.isArray(data)) { for (ln = data.length; i < ln; ++i) { events.push(this.createEvent(data[i])); } } else { events.push(this.createEvent(data)); } return events; }, /** * レスポンスオブジェクトからイベントを生成します。 * @param {Object} response XHRレスポンスオブジェクト。 * @return {Ext.direct.Event} イベント。 */ createEvent: function(response) { return Ext.create('direct.' + response.type, response); } });