]> git.proxmox.com Git - sencha-touch.git/blob - src/src/direct/JsonProvider.js
import Sencha Touch 2.4.2 source
[sencha-touch.git] / src / src / direct / JsonProvider.js
1 /**
2 * @class Ext.direct.JsonProvider
3 *
4 * A base provider for communicating using JSON. This is an abstract class
5 * and should not be instanced directly.
6 * @abstract
7 */
8
9 Ext.define('Ext.direct.JsonProvider', {
10 extend: 'Ext.direct.Provider',
11
12 alias: 'direct.jsonprovider',
13
14 uses: ['Ext.direct.ExceptionEvent'],
15
16 /**
17 * Parse the JSON response.
18 * @private
19 * @param {Object} response The XHR response object.
20 * @return {Object} The data in the response.
21 */
22 parseResponse: function(response) {
23 if (!Ext.isEmpty(response.responseText)) {
24 if (Ext.isObject(response.responseText)) {
25 return response.responseText;
26 }
27 return Ext.decode(response.responseText);
28 }
29 return null;
30 },
31
32 /**
33 * Creates a set of events based on the XHR response.
34 * @private
35 * @param {Object} response The XHR response.
36 * @return {Ext.direct.Event[]} An array of {@link Ext.direct.Event} objects.
37 */
38 createEvents: function(response) {
39 var data = null,
40 events = [],
41 i = 0,
42 ln, event;
43
44 try {
45 data = this.parseResponse(response);
46 } catch(e) {
47 event = Ext.create('Ext.direct.ExceptionEvent', {
48 data: e,
49 xhr: response,
50 code: Ext.direct.Manager.exceptions.PARSE,
51 message: 'Error parsing json response: \n\n ' + data
52 });
53 return [event];
54 }
55
56 if (Ext.isArray(data)) {
57 for (ln = data.length; i < ln; ++i) {
58 events.push(this.createEvent(data[i]));
59 }
60 } else {
61 events.push(this.createEvent(data));
62 }
63 return events;
64 },
65
66 /**
67 * Create an event from a response object.
68 * @param {Object} response The XHR response object.
69 * @return {Ext.direct.Event} The event.
70 */
71 createEvent: function(response) {
72 return Ext.create('direct.' + response.type, response);
73 }
74 });