]> git.proxmox.com Git - extjs.git/blame - extjs/packages/core/src/direct/JsonProvider.js
add extjs 6.0.1 sources
[extjs.git] / extjs / packages / core / src / direct / JsonProvider.js
CommitLineData
6527f429
DM
1/**\r
2 * A base provider for communicating using JSON. This is an abstract class\r
3 * and should not be instanced directly.\r
4 *\r
5 * @abstract\r
6 */\r
7\r
8Ext.define('Ext.direct.JsonProvider', {\r
9 extend: 'Ext.direct.Provider',\r
10 alias: 'direct.jsonprovider',\r
11\r
12 uses: [\r
13 'Ext.direct.ExceptionEvent',\r
14 'Ext.direct.Manager'\r
15 ],\r
16\r
17 /**\r
18 * Parse the JSON response\r
19 * @private\r
20 *\r
21 * @param {Object} response The XHR response object\r
22 *\r
23 * @return {Object} The data in the response.\r
24 */\r
25 parseResponse: function(response) {\r
26 var text = response && response.responseText;\r
27 \r
28 if (text) {\r
29 if (Ext.isObject(text) || Ext.isArray(text)) {\r
30 return text;\r
31 }\r
32\r
33 return Ext.decode(text);\r
34 }\r
35\r
36 return null;\r
37 },\r
38\r
39 /**\r
40 * Creates a set of events based on the XHR response\r
41 *\r
42 * @param {Object} response The XHR response\r
43 *\r
44 * @return {Ext.direct.Event[]} An array of Ext.direct.Event\r
45 */\r
46 createEvents: function(response) {\r
47 var me = this,\r
48 data = null,\r
49 events = [],\r
50 event, i, len;\r
51\r
52 try {\r
53 data = me.parseResponse(response);\r
54 }\r
55 catch (e) {\r
56 event = new Ext.direct.ExceptionEvent({\r
57 data: e,\r
58 xhr: response,\r
59 code: Ext.direct.Manager.exceptions.PARSE,\r
60 message: 'Error parsing json response: \n\n ' + e\r
61 });\r
62\r
63 return [event];\r
64 }\r
65\r
66 if (Ext.isArray(data)) {\r
67 for (i = 0, len = data.length; i < len; ++i) {\r
68 events.push(me.createEvent(data[i]));\r
69 }\r
70 }\r
71 else if (Ext.isObject(data)) {\r
72 events.push(me.createEvent(data));\r
73 }\r
74\r
75 return events;\r
76 },\r
77\r
78 /**\r
79 * Create an event from a response object\r
80 *\r
81 * @param {Object} response Response object\r
82 *\r
83 * @return {Ext.direct.Event} The event\r
84 */\r
85 createEvent: function(response) {\r
86 if (typeof response !== 'object'|| !('type' in response)) {\r
87 return new Ext.direct.ExceptionEvent({\r
88 data: response,\r
89 code: Ext.direct.Manager.exceptions.DATA,\r
90 message: 'Invalid data: event type is not specified'\r
91 });\r
92 }\r
93 \r
94 return Ext.create('direct.' + response.type, response);\r
95 }\r
96});