Roo/data/HttpProxy.js
[roojs1] / Roo / data / HttpProxy.js
1 /*
2  * Based on:
3  * Ext JS Library 1.1.1
4  * Copyright(c) 2006-2007, Ext JS, LLC.
5  *
6  * Originally Released Under LGPL - original licence link has changed is not relivant.
7  *
8  * Fork - LGPL
9  * <script type="text/javascript">
10  */
11 /**
12  * @class Roo.data.HttpProxy
13  * @extends Roo.data.DataProxy
14  * An implementation of {@link Roo.data.DataProxy} that reads a data object from an {@link Roo.data.Connection} object
15  * configured to reference a certain URL.<br><br>
16  * <p>
17  * <em>Note that this class cannot be used to retrieve data from a domain other than the domain
18  * from which the running page was served.<br><br>
19  * <p>
20  * For cross-domain access to remote data, use an {@link Roo.data.ScriptTagProxy}.</em><br><br>
21  * <p>
22  * Be aware that to enable the browser to parse an XML document, the server must set
23  * the Content-Type header in the HTTP response to "text/xml".
24  * @constructor
25  * @param {Object} conn Connection config options to add to each request (e.g. {url: 'foo.php'} or
26  * an {@link Roo.data.Connection} object.  If a Connection config is passed, the singleton {@link Roo.Ajax} object
27  * will be used to make the request.
28  */
29 Roo.data.HttpProxy = function(conn){
30     Roo.data.HttpProxy.superclass.constructor.call(this);
31     // is conn a conn config or a real conn?
32     if (conn.xtype) {
33         Roo.apply(this.conn.xtype);
34         conn  = false;
35     }
36     this.conn = conn;
37     this.useAjax = !conn || !conn.events;
38   
39 };
40
41 Roo.extend(Roo.data.HttpProxy, Roo.data.DataProxy, {
42     // thse are take from connection...
43     
44     /**
45      * @cfg {String} url (Optional) The default URL to be used for requests to the server. (defaults to undefined)
46      */
47     /**
48      * @cfg {Object} extraParams (Optional) An object containing properties which are used as
49      * extra parameters to each request made by this object. (defaults to undefined)
50      */
51     /**
52      * @cfg {Object} defaultHeaders (Optional) An object containing request headers which are added
53      *  to each request made by this object. (defaults to undefined)
54      */
55     /**
56      * @cfg {String} method (Optional) The default HTTP method to be used for requests. (defaults to undefined; if not set but parms are present will use POST, otherwise GET)
57      */
58     /**
59      * @cfg {Number} timeout (Optional) The timeout in milliseconds to be used for requests. (defaults to 30000)
60      */
61      /**
62      * @cfg {Boolean} autoAbort (Optional) Whether this request should abort any pending requests. (defaults to false)
63      * @type Boolean
64      */
65   
66
67     /**
68      * @cfg {Boolean} disableCaching (Optional) True to add a unique cache-buster param to GET requests. (defaults to true)
69      * @type Boolean
70      */
71     /**
72      * Return the {@link Roo.data.Connection} object being used by this Proxy.
73      * @return {Connection} The Connection object. This object may be used to subscribe to events on
74      * a finer-grained basis than the DataProxy events.
75      */
76     getConnection : function(){
77         return this.useAjax ? Roo.Ajax : this.conn;
78     },
79
80     /**
81      * Load data from the configured {@link Roo.data.Connection}, read the data object into
82      * a block of Roo.data.Records using the passed {@link Roo.data.DataReader} implementation, and
83      * process that block using the passed callback.
84      * @param {Object} params An object containing properties which are to be used as HTTP parameters
85      * for the request to the remote server.
86      * @param {Roo.data.DataReader} reader The Reader object which converts the data
87      * object into a block of Roo.data.Records.
88      * @param {Function} callback The function into which to pass the block of Roo.data.Records.
89      * The function must be passed <ul>
90      * <li>The Record block object</li>
91      * <li>The "arg" argument from the load function</li>
92      * <li>A boolean success indicator</li>
93      * </ul>
94      * @param {Object} scope The scope in which to call the callback
95      * @param {Object} arg An optional argument which is passed to the callback as its second parameter.
96      */
97     load : function(params, reader, callback, scope, arg){
98         if(this.fireEvent("beforeload", this, params) !== false){
99             var  o = {
100                 params : params || {},
101                 request: {
102                     callback : callback,
103                     scope : scope,
104                     arg : arg
105                 },
106                 reader: reader,
107                 callback : this.loadResponse,
108                 scope: this
109             };
110             if (this.timeout) {
111                 Roo.log('setting timeout to ' + this.timeout);
112                 o.timeout = this.timeout;
113             }
114             if(this.useAjax){
115                 Roo.applyIf(o, this.conn);
116                 if(this.activeRequest){
117                     Roo.Ajax.abort(this.activeRequest);
118                 }
119                 this.activeRequest = Roo.Ajax.request(o);
120             }else{
121                 this.conn.request(o);
122             }
123         }else{
124             callback.call(scope||this, null, arg, false);
125         }
126     },
127
128     // private
129     loadResponse : function(o, success, response){
130         delete this.activeRequest;
131         if(!success){
132             this.fireEvent("loadexception", this, o, response);
133             o.request.callback.call(o.request.scope, null, o.request.arg, false);
134             return;
135         }
136         var result;
137         try {
138             result = o.reader.read(response);
139         }catch(e){
140             this.fireEvent("loadexception", this, o, response, e);
141             o.request.callback.call(o.request.scope, null, o.request.arg, false);
142             return;
143         }
144         
145         this.fireEvent("load", this, o, o.request.arg);
146         o.request.callback.call(o.request.scope, result, o.request.arg, true);
147     },
148
149     // private
150     update : function(dataSet){
151
152     },
153
154     // private
155     updateResponse : function(dataSet){
156
157     }
158 });