X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/c930e9176a5a85509c5b0230e2bff5c22a591432..2e847cf21b8ab9d15fa167b315ca5b2fa92638fc:/docs/source/Connection.html diff --git a/docs/source/Connection.html b/docs/source/Connection.html index fc4beaa0..9c91d3b7 100644 --- a/docs/source/Connection.html +++ b/docs/source/Connection.html @@ -1,5 +1,6 @@ + The source code @@ -14,7 +15,7 @@ POST = 'POST', GET = 'GET', WINDOW = window; - +
/** * @class Ext.data.Connection * @extends Ext.util.Observable @@ -47,7 +48,7 @@ * @constructor * @param {Object} config a configuration object. */ - Ext.data.Connection = function(config){ + Ext.data.Connection = function(config){ Ext.apply(this, config); this.addEvents(
/** @@ -83,136 +84,6 @@ Ext.data.Connection.superclass.constructor.call(this); }; - // private - function handleResponse(response){ - this.transId = false; - var options = response.argument.options; - response.argument = options ? options.argument : null; - this.fireEvent(REQUESTCOMPLETE, this, response, options); - if(options.success){ - options.success.call(options.scope, response, options); - } - if(options.callback){ - options.callback.call(options.scope, options, true, response); - } - } - - // private - function handleFailure(response, e){ - this.transId = false; - var options = response.argument.options; - response.argument = options ? options.argument : null; - this.fireEvent(REQUESTEXCEPTION, this, response, options, e); - if(options.failure){ - options.failure.call(options.scope, response, options); - } - if(options.callback){ - options.callback.call(options.scope, options, false, response); - } - } - - // private - function doFormUpload(o, ps, url){ - var id = Ext.id(), - doc = document, - frame = doc.createElement('iframe'), - form = Ext.getDom(o.form), - hiddens = [], - hd, - encoding = 'multipart/form-data', - buf = { - target: form.target, - method: form.method, - encoding: form.encoding, - enctype: form.enctype, - action: form.action - }; - - Ext.apply(frame, { - id: id, - name: id, - className: 'x-hidden', - src: Ext.SSL_SECURE_URL // for IE - }); - doc.body.appendChild(frame); - - // This is required so that IE doesn't pop the response up in a new window. - if(Ext.isIE){ - document.frames[id].name = id; - } - - Ext.apply(form, { - target: id, - method: POST, - enctype: encoding, - encoding: encoding, - action: url || buf.action - }); - - // add dynamic params - ps = Ext.urlDecode(ps, false); - for(var k in ps){ - if(ps.hasOwnProperty(k)){ - hd = doc.createElement('input'); - hd.type = 'hidden'; - hd.value = ps[hd.name = k]; - form.appendChild(hd); - hiddens.push(hd); - } - } - - function cb(){ - var me = this, - // bogus response object - r = {responseText : '', - responseXML : null, - argument : o.argument}, - doc, - firstChild; - - try{ - doc = frame.contentWindow.document || frame.contentDocument || WINDOW.frames[id].document; - if(doc){ - if(doc.body){ - if(/textarea/i.test((firstChild = doc.body.firstChild || {}).tagName)){ // json response wrapped in textarea - r.responseText = firstChild.value; - }else{ - r.responseText = doc.body.innerHTML; - } - } - //in IE the document may still have a body even if returns XML. - r.responseXML = doc.XMLDocument || doc; - } - } - catch(e) {} - - Ext.EventManager.removeListener(frame, LOAD, cb, me); - - me.fireEvent(REQUESTCOMPLETE, me, r, o); - - function runCallback(fn, scope, args){ - if(Ext.isFunction(fn)){ - fn.apply(scope, args); - } - } - - runCallback(o.success, o.scope, [r, o]); - runCallback(o.callback, o.scope, [o, true, r]); - - if(!me.debugUploads){ - setTimeout(function(){Ext.removeNode(frame);}, 100); - } - } - - Ext.EventManager.on(frame, LOAD, cb, this); - form.submit(); - - Ext.apply(form, buf); - Ext.each(hiddens, function(h) { - Ext.removeNode(h); - }); - } - Ext.extend(Ext.data.Connection, Ext.util.Observable, {
/** * @cfg {String} url (Optional)

The default URL to be used for requests to the server. Defaults to undefined.

@@ -241,20 +112,20 @@ * @type Boolean */ autoAbort:false, - +
/** * @cfg {Boolean} disableCaching (Optional) True to add a unique cache-buster param to GET requests. (defaults to true) * @type Boolean */ disableCaching: true, - +
/** * @cfg {String} disableCachingParam (Optional) Change the parameter which is sent went disabling caching * through a cache buster. Defaults to '_dc' * @type String */ disableCachingParam: '_dc', - +
/** *

Sends an HTTP request to a remote server.

*

Important: Ajax server requests are asynchronous, and this call will @@ -292,8 +163,8 @@ Ext.Ajax.request({ * parameters:

*
  • success : Function (Optional)
    The function @@ -315,7 +186,7 @@ Ext.Ajax.request({ *
  • timeout : Number (Optional)
    The timeout in milliseconds to be used for this request. Defaults to 30 seconds.
  • *
  • form : Element/HTMLElement/String (Optional)
    The <form> * Element or the id of the <form> to pull parameters from.
  • - *
  • isUpload : Boolean (Optional)
    Only meaningful when used + *
  • isUpload : Boolean (Optional)
    Only meaningful when used * with the form option. *

    True if the form object is a file upload (will be set automatically if the form was * configured with enctype "multipart/form-data").

    @@ -360,77 +231,77 @@ Ext.Ajax.request({ me.indicatorText = '
    '+o.indicatorText+"
    "; } if(me.indicatorText) { - Ext.getDom(o.el).innerHTML = me.indicatorText; + Ext.getDom(o.el).innerHTML = me.indicatorText; } o.success = (Ext.isFunction(o.success) ? o.success : function(){}).createInterceptor(function(response) { Ext.getDom(o.el).innerHTML = response.responseText; }); } - + var p = o.params, - url = o.url || me.url, + url = o.url || me.url, method, - cb = {success: handleResponse, - failure: handleFailure, + cb = {success: me.handleResponse, + failure: me.handleFailure, scope: me, argument: {options: o}, timeout : o.timeout || me.timeout }, - form, - serForm; - - + form, + serForm; + + if (Ext.isFunction(p)) { p = p.call(o.scope||WINDOW, o); } - - p = Ext.urlEncode(me.extraParams, Ext.isObject(p) ? Ext.urlEncode(p) : p); - + + p = Ext.urlEncode(me.extraParams, Ext.isObject(p) ? Ext.urlEncode(p) : p); + if (Ext.isFunction(url)) { url = url.call(o.scope || WINDOW, o); } - + if((form = Ext.getDom(o.form))){ url = url || form.action; - if(o.isUpload || /multipart\/form-data/i.test(form.getAttribute("enctype"))) { - return doFormUpload.call(me, o, p, url); + if(o.isUpload || /multipart\/form-data/i.test(form.getAttribute("enctype"))) { + return me.doFormUpload.call(me, o, p, url); } - serForm = Ext.lib.Ajax.serializeForm(form); + serForm = Ext.lib.Ajax.serializeForm(form); p = p ? (p + '&' + serForm) : serForm; } - + method = o.method || me.method || ((p || o.xmlData || o.jsonData) ? POST : GET); - + if(method === GET && (me.disableCaching && o.disableCaching !== false) || o.disableCaching === true){ var dcp = o.disableCachingParam || me.disableCachingParam; url = Ext.urlAppend(url, dcp + '=' + (new Date().getTime())); } - + o.headers = Ext.apply(o.headers || {}, me.defaultHeaders || {}); - + if(o.autoAbort === true || me.autoAbort) { me.abort(); } - + if((method == GET || o.xmlData || o.jsonData) && p){ - url = Ext.urlAppend(url, p); + url = Ext.urlAppend(url, p); p = ''; } return (me.transId = Ext.lib.Ajax.request(method, url, cb, p, o)); - }else{ + }else{ return o.callback ? o.callback.apply(o.scope, [o,UNDEFINED,UNDEFINED]) : null; } }, - +
    /** * Determine whether this object has a request outstanding. * @param {Number} transactionId (Optional) defaults to the last transaction * @return {Boolean} True if there is an outstanding request. */ isLoading : function(transId){ - return transId ? Ext.lib.Ajax.isCallInProgress(transId) : !! this.transId; + return transId ? Ext.lib.Ajax.isCallInProgress(transId) : !! this.transId; }, - +
    /** * Aborts any outstanding request. * @param {Number} transactionId (Optional) defaults to the last transaction @@ -439,6 +310,143 @@ Ext.Ajax.request({ if(transId || this.isLoading()){ Ext.lib.Ajax.abort(transId || this.transId); } + }, + + // private + handleResponse : function(response){ + this.transId = false; + var options = response.argument.options; + response.argument = options ? options.argument : null; + this.fireEvent(REQUESTCOMPLETE, this, response, options); + if(options.success){ + options.success.call(options.scope, response, options); + } + if(options.callback){ + options.callback.call(options.scope, options, true, response); + } + }, + + // private + handleFailure : function(response, e){ + this.transId = false; + var options = response.argument.options; + response.argument = options ? options.argument : null; + this.fireEvent(REQUESTEXCEPTION, this, response, options, e); + if(options.failure){ + options.failure.call(options.scope, response, options); + } + if(options.callback){ + options.callback.call(options.scope, options, false, response); + } + }, + + // private + doFormUpload : function(o, ps, url){ + var id = Ext.id(), + doc = document, + frame = doc.createElement('iframe'), + form = Ext.getDom(o.form), + hiddens = [], + hd, + encoding = 'multipart/form-data', + buf = { + target: form.target, + method: form.method, + encoding: form.encoding, + enctype: form.enctype, + action: form.action + }; + + Ext.fly(frame).set({ + id: id, + name: id, + cls: 'x-hidden' + + }); + + doc.body.appendChild(frame); + + //Reset the Frame to neutral domain + Ext.fly(frame).set({ + src : Ext.SSL_SECURE_URL + }); + + // This is required so that IE doesn't pop the response up in a new window. + if(Ext.isIE){ + document.frames[id].name = id; + } + + + Ext.fly(form).set({ + target: id, + method: POST, + enctype: encoding, + encoding: encoding, + action: url || buf.action + }); + + // add dynamic params + Ext.iterate(Ext.urlDecode(ps, false), function(k, v){ + hd = doc.createElement('input'); + Ext.fly(hd).set({ + type: 'hidden', + value: v, + name: k + }); + form.appendChild(hd); + hiddens.push(hd); + }); + + function cb(){ + var me = this, + // bogus response object + r = {responseText : '', + responseXML : null, + argument : o.argument}, + doc, + firstChild; + + try{ + doc = frame.contentWindow.document || frame.contentDocument || WINDOW.frames[id].document; + if(doc){ + if(doc.body){ + if(/textarea/i.test((firstChild = doc.body.firstChild || {}).tagName)){ // json response wrapped in textarea + r.responseText = firstChild.value; + }else{ + r.responseText = doc.body.innerHTML; + } + } + //in IE the document may still have a body even if returns XML. + r.responseXML = doc.XMLDocument || doc; + } + } + catch(e) {} + + Ext.EventManager.removeListener(frame, LOAD, cb, me); + + me.fireEvent(REQUESTCOMPLETE, me, r, o); + + function runCallback(fn, scope, args){ + if(Ext.isFunction(fn)){ + fn.apply(scope, args); + } + } + + runCallback(o.success, o.scope, [r, o]); + runCallback(o.callback, o.scope, [o, true, r]); + + if(!me.debugUploads){ + setTimeout(function(){Ext.removeNode(frame);}, 100); + } + } + + Ext.EventManager.on(frame, LOAD, cb, this); + form.submit(); + + Ext.fly(form).set(buf); + Ext.each(hiddens, function(h) { + Ext.removeNode(h); + }); } }); })(); @@ -460,7 +468,7 @@ Ext.Ajax.request({ Ext.Ajax.defaultHeaders = { 'Powered-By': 'Ext' }; - * + * *

    *

    Common Events you may want to set are:

      *
    • {@link Ext.data.Connection#beforerequest beforerequest}

    • @@ -472,7 +480,7 @@ Ext.Ajax.defaultHeaders = { Ext.Ajax.on('beforerequest', this.showSpinner, this); Ext.Ajax.on('requestcomplete', this.hideSpinner, this); Ext.Ajax.on('requestexception', this.hideSpinner, this); - * + * *

      *

      An example request:

      *
      
      @@ -492,7 +500,7 @@ Ext.Ajax.{@link Ext.data.Connection#request request}({
           form: 'some-form',
           params: 'foo=bar'
       });
      - * 
      + * *

      * @singleton */