Connection.js
上传用户:shuoshiled
上传日期:2018-01-28
资源大小:10124k
文件大小:27k
源码类别:

中间件编程

开发平台:

JavaScript

  1. /*!  * Ext JS Library 3.0.0  * Copyright(c) 2006-2009 Ext JS, LLC  * licensing@extjs.com  * http://www.extjs.com/license  */ (function(){
  2.     var BEFOREREQUEST = "beforerequest",
  3.         REQUESTCOMPLETE = "requestcomplete",
  4.         REQUESTEXCEPTION = "requestexception",
  5.         UNDEFINED = undefined,
  6.         LOAD = 'load',
  7.         POST = 'POST',
  8.         GET = 'GET',
  9.         WINDOW = window;
  10.     
  11.     /**
  12.      * @class Ext.data.Connection
  13.      * @extends Ext.util.Observable
  14.      * <p>The class encapsulates a connection to the page's originating domain, allowing requests to be made
  15.      * either to a configured URL, or to a URL specified at request time.</p>
  16.      * <p>Requests made by this class are asynchronous, and will return immediately. No data from
  17.      * the server will be available to the statement immediately following the {@link #request} call.
  18.      * To process returned data, use a
  19.      * <a href="#request-option-success" ext:member="request-option-success" ext:cls="Ext.data.Connection">success callback</a>
  20.      * in the request options object,
  21.      * or an {@link #requestcomplete event listener}.</p>
  22.      * <p><h3>File Uploads</h3><a href="#request-option-isUpload" ext:member="request-option-isUpload" ext:cls="Ext.data.Connection">File uploads</a> are not performed using normal "Ajax" techniques, that
  23.      * is they are <b>not</b> performed using XMLHttpRequests. Instead the form is submitted in the standard
  24.      * manner with the DOM <tt>&lt;form></tt> element temporarily modified to have its
  25.      * <a href="http://www.w3.org/TR/REC-html40/present/frames.html#adef-target">target</a> set to refer
  26.      * to a dynamically generated, hidden <tt>&lt;iframe></tt> which is inserted into the document
  27.      * but removed after the return data has been gathered.</p>
  28.      * <p>The server response is parsed by the browser to create the document for the IFRAME. If the
  29.      * server is using JSON to send the return object, then the
  30.      * <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17">Content-Type</a> header
  31.      * must be set to "text/html" in order to tell the browser to insert the text unchanged into the document body.</p>
  32.      * <p>Characters which are significant to an HTML parser must be sent as HTML entities, so encode
  33.      * "&lt;" as "&amp;lt;", "&amp;" as "&amp;amp;" etc.</p>
  34.      * <p>The response text is retrieved from the document, and a fake XMLHttpRequest object
  35.      * is created containing a <tt>responseText</tt> property in order to conform to the
  36.      * requirements of event handlers and callbacks.</p>
  37.      * <p>Be aware that file upload packets are sent with the content type <a href="http://www.faqs.org/rfcs/rfc2388.html">multipart/form</a>
  38.      * and some server technologies (notably JEE) may require some custom processing in order to
  39.      * retrieve parameter names and parameter values from the packet content.</p>
  40.      * @constructor
  41.      * @param {Object} config a configuration object.
  42.      */
  43.     Ext.data.Connection = function(config){    
  44.         Ext.apply(this, config);
  45.         this.addEvents(
  46.             /**
  47.              * @event beforerequest
  48.              * Fires before a network request is made to retrieve a data object.
  49.              * @param {Connection} conn This Connection object.
  50.              * @param {Object} options The options config object passed to the {@link #request} method.
  51.              */
  52.             BEFOREREQUEST,
  53.             /**
  54.              * @event requestcomplete
  55.              * Fires if the request was successfully completed.
  56.              * @param {Connection} conn This Connection object.
  57.              * @param {Object} response The XHR object containing the response data.
  58.              * See <a href="http://www.w3.org/TR/XMLHttpRequest/">The XMLHttpRequest Object</a>
  59.              * for details.
  60.              * @param {Object} options The options config object passed to the {@link #request} method.
  61.              */
  62.             REQUESTCOMPLETE,
  63.             /**
  64.              * @event requestexception
  65.              * Fires if an error HTTP status was returned from the server.
  66.              * See <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html">HTTP Status Code Definitions</a>
  67.              * for details of HTTP status codes.
  68.              * @param {Connection} conn This Connection object.
  69.              * @param {Object} response The XHR object containing the response data.
  70.              * See <a href="http://www.w3.org/TR/XMLHttpRequest/">The XMLHttpRequest Object</a>
  71.              * for details.
  72.              * @param {Object} options The options config object passed to the {@link #request} method.
  73.              */
  74.             REQUESTEXCEPTION
  75.         );
  76.         Ext.data.Connection.superclass.constructor.call(this);
  77.     };
  78.     // private
  79.     function handleResponse(response){
  80.         this.transId = false;
  81.         var options = response.argument.options;
  82.         response.argument = options ? options.argument : null;
  83.         this.fireEvent(REQUESTCOMPLETE, this, response, options);
  84.         if(options.success){
  85.             options.success.call(options.scope, response, options);
  86.         }
  87.         if(options.callback){
  88.             options.callback.call(options.scope, options, true, response);
  89.         }
  90.     }
  91.     // private
  92.     function handleFailure(response, e){
  93.         this.transId = false;
  94.         var options = response.argument.options;
  95.         response.argument = options ? options.argument : null;
  96.         this.fireEvent(REQUESTEXCEPTION, this, response, options, e);
  97.         if(options.failure){
  98.             options.failure.call(options.scope, response, options);
  99.         }
  100.         if(options.callback){
  101.             options.callback.call(options.scope, options, false, response);
  102.         }
  103.     }
  104.     // private
  105.     function doFormUpload(o, ps, url){
  106.         var id = Ext.id(),
  107.             doc = document,
  108.             frame = doc.createElement('iframe'),
  109.             form = Ext.getDom(o.form),
  110.             hiddens = [],
  111.             hd,
  112.             encoding = 'multipart/form-data',
  113.             buf = {
  114.                 target: form.target,
  115.                 method: form.method,
  116.                 encoding: form.encoding,
  117.                 enctype: form.enctype,
  118.                 action: form.action
  119.             };
  120.             
  121.         Ext.apply(frame, {
  122.             id: id,
  123.             name: id,
  124.             className: 'x-hidden',
  125.             src: Ext.SSL_SECURE_URL // for IE
  126.         });     
  127.         doc.body.appendChild(frame);
  128.         
  129.         // This is required so that IE doesn't pop the response up in a new window.
  130.         if(Ext.isIE){
  131.            document.frames[id].name = id;
  132.         }
  133.         
  134.         Ext.apply(form, {
  135.             target: id,
  136.             method: POST,
  137.             enctype: encoding,
  138.             encoding: encoding,
  139.             action: url || buf.action
  140.         });
  141.         
  142.         // add dynamic params            
  143.         ps = Ext.urlDecode(ps, false);
  144.         for(var k in ps){
  145.             if(ps.hasOwnProperty(k)){
  146.                 hd = doc.createElement('input');
  147.                 hd.type = 'hidden';                    
  148.                 hd.value = ps[hd.name = k];
  149.                 form.appendChild(hd);
  150.                 hiddens.push(hd);
  151.             }
  152.         }        
  153.         function cb(){
  154.             var me = this,
  155.                 // bogus response object
  156.                 r = {responseText : '',
  157.                      responseXML : null,
  158.                      argument : o.argument},
  159.                 doc,
  160.                 firstChild;
  161.             try{ 
  162.                 doc = frame.contentWindow.document || frame.contentDocument || WINDOW.frames[id].document;
  163.                 if(doc){
  164.                     if(doc.body){
  165.                         if(/textarea/i.test((firstChild = doc.body.firstChild || {}).tagName)){ // json response wrapped in textarea                        
  166.                             r.responseText = firstChild.value;
  167.                         }else{
  168.                             r.responseText = doc.body.innerHTML;
  169.                         }
  170.                     }
  171.                     //in IE the document may still have a body even if returns XML.
  172.                     r.responseXML = doc.XMLDocument || doc;
  173.                 }
  174.             }
  175.             catch(e) {}
  176.             Ext.EventManager.removeListener(frame, LOAD, cb, me);
  177.             me.fireEvent(REQUESTCOMPLETE, me, r, o);
  178.             
  179.             function runCallback(fn, scope, args){
  180.                 if(Ext.isFunction(fn)){
  181.                     fn.apply(scope, args);
  182.                 }
  183.             }
  184.             runCallback(o.success, o.scope, [r, o]);
  185.             runCallback(o.callback, o.scope, [o, true, r]);
  186.             if(!me.debugUploads){
  187.                 setTimeout(function(){Ext.removeNode(frame);}, 100);
  188.             }
  189.         }
  190.         Ext.EventManager.on(frame, LOAD, cb, this);
  191.         form.submit();
  192.         
  193.         Ext.apply(form, buf);
  194.         Ext.each(hiddens, function(h) {
  195.             Ext.removeNode(h);
  196.         });
  197.     }
  198.     Ext.extend(Ext.data.Connection, Ext.util.Observable, {
  199.         /**
  200.          * @cfg {String} url (Optional) <p>The default URL to be used for requests to the server. Defaults to undefined.</p>
  201.          * <p>The <code>url</code> config may be a function which <i>returns</i> the URL to use for the Ajax request. The scope
  202.          * (<code><b>this</b></code> reference) of the function is the <code>scope</code> option passed to the {@link #request} method.</p>
  203.          */
  204.         /**
  205.          * @cfg {Object} extraParams (Optional) An object containing properties which are used as
  206.          * extra parameters to each request made by this object. (defaults to undefined)
  207.          */
  208.         /**
  209.          * @cfg {Object} defaultHeaders (Optional) An object containing request headers which are added
  210.          *  to each request made by this object. (defaults to undefined)
  211.          */
  212.         /**
  213.          * @cfg {String} method (Optional) The default HTTP method to be used for requests.
  214.          * (defaults to undefined; if not set, but {@link #request} params are present, POST will be used;
  215.          * otherwise, GET will be used.)
  216.          */
  217.         /**
  218.          * @cfg {Number} timeout (Optional) The timeout in milliseconds to be used for requests. (defaults to 30000)
  219.          */
  220.         timeout : 30000,
  221.         /**
  222.          * @cfg {Boolean} autoAbort (Optional) Whether this request should abort any pending requests. (defaults to false)
  223.          * @type Boolean
  224.          */
  225.         autoAbort:false,
  226.     
  227.         /**
  228.          * @cfg {Boolean} disableCaching (Optional) True to add a unique cache-buster param to GET requests. (defaults to true)
  229.          * @type Boolean
  230.          */
  231.         disableCaching: true,
  232.         
  233.         /**
  234.          * @cfg {String} disableCachingParam (Optional) Change the parameter which is sent went disabling caching
  235.          * through a cache buster. Defaults to '_dc'
  236.          * @type String
  237.          */
  238.         disableCachingParam: '_dc',
  239.         
  240.         /**
  241.          * <p>Sends an HTTP request to a remote server.</p>
  242.          * <p><b>Important:</b> Ajax server requests are asynchronous, and this call will
  243.          * return before the response has been received. Process any returned data
  244.          * in a callback function.</p>
  245.          * <pre><code>
  246. Ext.Ajax.request({
  247.    url: 'ajax_demo/sample.json',
  248.    success: function(response, opts) {
  249.       var obj = Ext.decode(response.responseText);
  250.       console.dir(obj);
  251.    },
  252.    failure: function(response, opts) {
  253.       console.log('server-side failure with status code ' + response.status);
  254.    }
  255. });
  256.          * </code></pre>
  257.          * <p>To execute a callback function in the correct scope, use the <tt>scope</tt> option.</p>
  258.          * @param {Object} options An object which may contain the following properties:<ul>
  259.          * <li><b>url</b> : String/Function (Optional)<div class="sub-desc">The URL to
  260.          * which to send the request, or a function to call which returns a URL string. The scope of the
  261.          * function is specified by the <tt>scope</tt> option. Defaults to the configured
  262.          * <tt>{@link #url}</tt>.</div></li>
  263.          * <li><b>params</b> : Object/String/Function (Optional)<div class="sub-desc">
  264.          * An object containing properties which are used as parameters to the
  265.          * request, a url encoded string or a function to call to get either. The scope of the function
  266.          * is specified by the <tt>scope</tt> option.</div></li>
  267.          * <li><b>method</b> : String (Optional)<div class="sub-desc">The HTTP method to use
  268.          * for the request. Defaults to the configured method, or if no method was configured,
  269.          * "GET" if no parameters are being sent, and "POST" if parameters are being sent.  Note that
  270.          * the method name is case-sensitive and should be all caps.</div></li>
  271.          * <li><b>callback</b> : Function (Optional)<div class="sub-desc">The
  272.          * function to be called upon receipt of the HTTP response. The callback is
  273.          * called regardless of success or failure and is passed the following
  274.          * parameters:<ul>
  275.          * <li><b>options</b> : Object<div class="sub-desc">The parameter to the request call.</div></li>
  276.          * <li><b>success</b> : Boolean<div class="sub-desc">True if the request succeeded.</div></li>
  277.          * <li><b>response</b> : Object<div class="sub-desc">The XMLHttpRequest object containing the response data. 
  278.          * See <a href="http://www.w3.org/TR/XMLHttpRequest/">http://www.w3.org/TR/XMLHttpRequest/</a> for details about 
  279.          * accessing elements of the response.</div></li>
  280.          * </ul></div></li>
  281.          * <li><a id="request-option-success"></a><b>success</b> : Function (Optional)<div class="sub-desc">The function
  282.          * to be called upon success of the request. The callback is passed the following
  283.          * parameters:<ul>
  284.          * <li><b>response</b> : Object<div class="sub-desc">The XMLHttpRequest object containing the response data.</div></li>
  285.          * <li><b>options</b> : Object<div class="sub-desc">The parameter to the request call.</div></li>
  286.          * </ul></div></li>
  287.          * <li><b>failure</b> : Function (Optional)<div class="sub-desc">The function
  288.          * to be called upon failure of the request. The callback is passed the
  289.          * following parameters:<ul>
  290.          * <li><b>response</b> : Object<div class="sub-desc">The XMLHttpRequest object containing the response data.</div></li>
  291.          * <li><b>options</b> : Object<div class="sub-desc">The parameter to the request call.</div></li>
  292.          * </ul></div></li>
  293.          * <li><b>scope</b> : Object (Optional)<div class="sub-desc">The scope in
  294.          * which to execute the callbacks: The "this" object for the callback function. If the <tt>url</tt>, or <tt>params</tt> options were
  295.          * specified as functions from which to draw values, then this also serves as the scope for those function calls.
  296.          * Defaults to the browser window.</div></li>
  297.          * <li><b>timeout</b> : Number (Optional)<div class="sub-desc">The timeout in milliseconds to be used for this request. Defaults to 30 seconds.</div></li>
  298.          * <li><b>form</b> : Element/HTMLElement/String (Optional)<div class="sub-desc">The <tt>&lt;form&gt;</tt>
  299.          * Element or the id of the <tt>&lt;form&gt;</tt> to pull parameters from.</div></li>
  300.          * <li><a id="request-option-isUpload"></a><b>isUpload</b> : Boolean (Optional)<div class="sub-desc"><b>Only meaningful when used 
  301.          * with the <tt>form</tt> option</b>.
  302.          * <p>True if the form object is a file upload (will be set automatically if the form was
  303.          * configured with <b><tt>enctype</tt></b> "multipart/form-data").</p>
  304.          * <p>File uploads are not performed using normal "Ajax" techniques, that is they are <b>not</b>
  305.          * performed using XMLHttpRequests. Instead the form is submitted in the standard manner with the
  306.          * DOM <tt>&lt;form></tt> element temporarily modified to have its
  307.          * <a href="http://www.w3.org/TR/REC-html40/present/frames.html#adef-target">target</a> set to refer
  308.          * to a dynamically generated, hidden <tt>&lt;iframe></tt> which is inserted into the document
  309.          * but removed after the return data has been gathered.</p>
  310.          * <p>The server response is parsed by the browser to create the document for the IFRAME. If the
  311.          * server is using JSON to send the return object, then the
  312.          * <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17">Content-Type</a> header
  313.          * must be set to "text/html" in order to tell the browser to insert the text unchanged into the document body.</p>
  314.          * <p>The response text is retrieved from the document, and a fake XMLHttpRequest object
  315.          * is created containing a <tt>responseText</tt> property in order to conform to the
  316.          * requirements of event handlers and callbacks.</p>
  317.          * <p>Be aware that file upload packets are sent with the content type <a href="http://www.faqs.org/rfcs/rfc2388.html">multipart/form</a>
  318.          * and some server technologies (notably JEE) may require some custom processing in order to
  319.          * retrieve parameter names and parameter values from the packet content.</p>
  320.          * </div></li>
  321.          * <li><b>headers</b> : Object (Optional)<div class="sub-desc">Request
  322.          * headers to set for the request.</div></li>
  323.          * <li><b>xmlData</b> : Object (Optional)<div class="sub-desc">XML document
  324.          * to use for the post. Note: This will be used instead of params for the post
  325.          * data. Any params will be appended to the URL.</div></li>
  326.          * <li><b>jsonData</b> : Object/String (Optional)<div class="sub-desc">JSON
  327.          * data to use as the post. Note: This will be used instead of params for the post
  328.          * data. Any params will be appended to the URL.</div></li>
  329.          * <li><b>disableCaching</b> : Boolean (Optional)<div class="sub-desc">True
  330.          * to add a unique cache-buster param to GET requests.</div></li>
  331.          * </ul></p>
  332.          * <p>The options object may also contain any other property which might be needed to perform
  333.          * postprocessing in a callback because it is passed to callback functions.</p>
  334.          * @return {Number} transactionId The id of the server transaction. This may be used
  335.          * to cancel the request.
  336.          */
  337.         request : function(o){
  338.             var me = this;
  339.             if(me.fireEvent(BEFOREREQUEST, me, o)){
  340.                 if (o.el) {
  341.                     if(!Ext.isEmpty(o.indicatorText)){
  342.                         me.indicatorText = '<div class="loading-indicator">'+o.indicatorText+"</div>";
  343.                     }
  344.                     if(me.indicatorText) {
  345.                         Ext.getDom(o.el).innerHTML = me.indicatorText;                        
  346.                     }
  347.                     o.success = (Ext.isFunction(o.success) ? o.success : function(){}).createInterceptor(function(response) {
  348.                         Ext.getDom(o.el).innerHTML = response.responseText;
  349.                     });
  350.                 }
  351.                 
  352.                 var p = o.params,
  353.                     url = o.url || me.url,                
  354.                     method,
  355.                     cb = {success: handleResponse,
  356.                           failure: handleFailure,
  357.                           scope: me,
  358.                           argument: {options: o},
  359.                           timeout : o.timeout || me.timeout
  360.                     },
  361.                     form,                    
  362.                     serForm;                    
  363.                   
  364.                      
  365.                 if (Ext.isFunction(p)) {
  366.                     p = p.call(o.scope||WINDOW, o);
  367.                 }
  368.                                                            
  369.                 p = Ext.urlEncode(me.extraParams, Ext.isObject(p) ? Ext.urlEncode(p) : p);    
  370.                 
  371.                 if (Ext.isFunction(url)) {
  372.                     url = url.call(o.scope || WINDOW, o);
  373.                 }
  374.     
  375.                 if((form = Ext.getDom(o.form))){
  376.                     url = url || form.action;
  377.                      if(o.isUpload || /multipart/form-data/i.test(form.getAttribute("enctype"))) { 
  378.                          return doFormUpload.call(me, o, p, url);
  379.                      }
  380.                     serForm = Ext.lib.Ajax.serializeForm(form);                    
  381.                     p = p ? (p + '&' + serForm) : serForm;
  382.                 }
  383.                 
  384.                 method = o.method || me.method || ((p || o.xmlData || o.jsonData) ? POST : GET);
  385.                 
  386.                 if(method === GET && (me.disableCaching && o.disableCaching !== false) || o.disableCaching === true){
  387.                     var dcp = o.disableCachingParam || me.disableCachingParam;
  388.                     url = Ext.urlAppend(url, dcp + '=' + (new Date().getTime()));
  389.                 }
  390.                 
  391.                 o.headers = Ext.apply(o.headers || {}, me.defaultHeaders || {});
  392.                 
  393.                 if(o.autoAbort === true || me.autoAbort) {
  394.                     me.abort();
  395.                 }
  396.                  
  397.                 if((method == GET || o.xmlData || o.jsonData) && p){
  398.                     url = Ext.urlAppend(url, p);  
  399.                     p = '';
  400.                 }
  401.                 return (me.transId = Ext.lib.Ajax.request(method, url, cb, p, o));
  402.             }else{                
  403.                 return o.callback ? o.callback.apply(o.scope, [o,UNDEFINED,UNDEFINED]) : null;
  404.             }
  405.         },
  406.     
  407.         /**
  408.          * Determine whether this object has a request outstanding.
  409.          * @param {Number} transactionId (Optional) defaults to the last transaction
  410.          * @return {Boolean} True if there is an outstanding request.
  411.          */
  412.         isLoading : function(transId){
  413.             return transId ? Ext.lib.Ajax.isCallInProgress(transId) : !! this.transId;            
  414.         },
  415.     
  416.         /**
  417.          * Aborts any outstanding request.
  418.          * @param {Number} transactionId (Optional) defaults to the last transaction
  419.          */
  420.         abort : function(transId){
  421.             if(transId || this.isLoading()){
  422.                 Ext.lib.Ajax.abort(transId || this.transId);
  423.             }
  424.         }
  425.     });
  426. })();
  427. /**
  428.  * @class Ext.Ajax
  429.  * @extends Ext.data.Connection
  430.  * <p>The global Ajax request class that provides a simple way to make Ajax requests
  431.  * with maximum flexibility.</p>
  432.  * <p>Since Ext.Ajax is a singleton, you can set common properties/events for it once
  433.  * and override them at the request function level only if necessary.</p>
  434.  * <p>Common <b>Properties</b> you may want to set are:<div class="mdetail-params"><ul>
  435.  * <li><b><tt>{@link #method}</tt></b><p class="sub-desc"></p></li>
  436.  * <li><b><tt>{@link #extraParams}</tt></b><p class="sub-desc"></p></li>
  437.  * <li><b><tt>{@link #url}</tt></b><p class="sub-desc"></p></li>
  438.  * </ul></div>
  439.  * <pre><code>
  440. // Default headers to pass in every request
  441. Ext.Ajax.defaultHeaders = {
  442.     'Powered-By': 'Ext'
  443. };
  444.  * </code></pre> 
  445.  * </p>
  446.  * <p>Common <b>Events</b> you may want to set are:<div class="mdetail-params"><ul>
  447.  * <li><b><tt>{@link Ext.data.Connection#beforerequest beforerequest}</tt></b><p class="sub-desc"></p></li>
  448.  * <li><b><tt>{@link Ext.data.Connection#requestcomplete requestcomplete}</tt></b><p class="sub-desc"></p></li>
  449.  * <li><b><tt>{@link Ext.data.Connection#requestexception requestexception}</tt></b><p class="sub-desc"></p></li>
  450.  * </ul></div>
  451.  * <pre><code>
  452. // Example: show a spinner during all Ajax requests
  453. Ext.Ajax.on('beforerequest', this.showSpinner, this);
  454. Ext.Ajax.on('requestcomplete', this.hideSpinner, this);
  455. Ext.Ajax.on('requestexception', this.hideSpinner, this);
  456.  * </code></pre> 
  457.  * </p>
  458.  * <p>An example request:</p>
  459.  * <pre><code>
  460. // Basic request
  461. Ext.Ajax.{@link Ext.data.Connection#request request}({
  462.    url: 'foo.php',
  463.    success: someFn,
  464.    failure: otherFn,
  465.    headers: {
  466.        'my-header': 'foo'
  467.    },
  468.    params: { foo: 'bar' }
  469. });
  470. // Simple ajax form submission
  471. Ext.Ajax.{@link Ext.data.Connection#request request}({
  472.     form: 'some-form',
  473.     params: 'foo=bar'
  474. });
  475.  * </code></pre> 
  476.  * </p>
  477.  * @singleton
  478.  */
  479. Ext.Ajax = new Ext.data.Connection({
  480.     /**
  481.      * @cfg {String} url @hide
  482.      */
  483.     /**
  484.      * @cfg {Object} extraParams @hide
  485.      */
  486.     /**
  487.      * @cfg {Object} defaultHeaders @hide
  488.      */
  489.     /**
  490.      * @cfg {String} method (Optional) @hide
  491.      */
  492.     /**
  493.      * @cfg {Number} timeout (Optional) @hide
  494.      */
  495.     /**
  496.      * @cfg {Boolean} autoAbort (Optional) @hide
  497.      */
  498.     /**
  499.      * @cfg {Boolean} disableCaching (Optional) @hide
  500.      */
  501.     /**
  502.      * @property  disableCaching
  503.      * True to add a unique cache-buster param to GET requests. (defaults to true)
  504.      * @type Boolean
  505.      */
  506.     /**
  507.      * @property  url
  508.      * The default URL to be used for requests to the server. (defaults to undefined)
  509.      * If the server receives all requests through one URL, setting this once is easier than
  510.      * entering it on every request.
  511.      * @type String
  512.      */
  513.     /**
  514.      * @property  extraParams
  515.      * An object containing properties which are used as extra parameters to each request made
  516.      * by this object (defaults to undefined). Session information and other data that you need
  517.      * to pass with each request are commonly put here.
  518.      * @type Object
  519.      */
  520.     /**
  521.      * @property  defaultHeaders
  522.      * An object containing request headers which are added to each request made by this object
  523.      * (defaults to undefined).
  524.      * @type Object
  525.      */
  526.     /**
  527.      * @property  method
  528.      * The default HTTP method to be used for requests. Note that this is case-sensitive and
  529.      * should be all caps (defaults to undefined; if not set but params are present will use
  530.      * <tt>"POST"</tt>, otherwise will use <tt>"GET"</tt>.)
  531.      * @type String
  532.      */
  533.     /**
  534.      * @property  timeout
  535.      * The timeout in milliseconds to be used for requests. (defaults to 30000)
  536.      * @type Number
  537.      */
  538.     /**
  539.      * @property  autoAbort
  540.      * Whether a new request should abort any pending requests. (defaults to false)
  541.      * @type Boolean
  542.      */
  543.     autoAbort : false,
  544.     /**
  545.      * Serialize the passed form into a url encoded string
  546.      * @param {String/HTMLElement} form
  547.      * @return {String}
  548.      */
  549.     serializeForm : function(form){
  550.         return Ext.lib.Ajax.serializeForm(form);
  551.     }
  552. });