📄 connection.js
字号:
/*
* Ext JS Library 3.0 Pre-alpha
* Copyright(c) 2006-2008, Ext JS, LLC.
* licensing@extjs.com
*
* http://extjs.com/license
*/
(function(){ var BEFOREREQUEST = "beforerequest", REQUESTCOMPLETE = "requestcomplete", REQUESTEXCEPTION = "requestexception", UNDEFINED = undefined, LOAD = 'load', POST = 'POST', GET = 'GET', WINDOW = window; /** * @class Ext.data.Connection * @extends Ext.util.Observable * <p>The class encapsulates a connection to the page's originating domain, allowing requests to be made * either to a configured URL, or to a URL specified at request time.</p> * <p>Requests made by this class are asynchronous, and will return immediately. No data from * the server will be available to the statement immediately following the {@link #request} call. * To process returned data, use a * <a href="#request-option-success" ext:member="request-option-success" ext:cls="Ext.data.Connection">success callback</a> * in the request options object, * or an {@link #requestcomplete event listener}.</p> * <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 * is they are <b>not</b> performed using XMLHttpRequests. Instead the form is submitted in the standard * manner with the DOM <tt><form></tt> element temporarily modified to have its * <a href="http://www.w3.org/TR/REC-html40/present/frames.html#adef-target">target</a> set to refer * to a dynamically generated, hidden <tt><iframe></tt> which is inserted into the document * but removed after the return data has been gathered.</p> * <p>The server response is parsed by the browser to create the document for the IFRAME. If the * server is using JSON to send the return object, then the * <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17">Content-Type</a> header * must be set to "text/html" in order to tell the browser to insert the text unchanged into the document body.</p> * <p>Characters which are significant to an HTML parser must be sent as HTML entities, so encode * "<" as "&lt;", "&" as "&amp;" etc.</p> * <p>The response text is retrieved from the document, and a fake XMLHttpRequest object * is created containing a <tt>responseText</tt> property in order to conform to the * requirements of event handlers and callbacks.</p> * <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> * and some server technologies (notably JEE) may require some custom processing in order to * retrieve parameter names and parameter values from the packet content.</p> * @constructor * @param {Object} config a configuration object. */ Ext.data.Connection = function(config){ Ext.apply(this, config); this.addEvents( /** * @event beforerequest * Fires before a network request is made to retrieve a data object. * @param {Connection} conn This Connection object. * @param {Object} options The options config object passed to the {@link #request} method. */ BEFOREREQUEST, /** * @event requestcomplete * Fires if the request was successfully completed. * @param {Connection} conn This Connection object. * @param {Object} response The XHR object containing the response data. * See <a href="http://www.w3.org/TR/XMLHttpRequest/">The XMLHttpRequest Object</a> * for details. * @param {Object} options The options config object passed to the {@link #request} method. */ REQUESTCOMPLETE, /** * @event requestexception * Fires if an error HTTP status was returned from the server. * See <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html">HTTP Status Code Definitions</a> * for details of HTTP status codes. * @param {Connection} conn This Connection object. * @param {Object} response The XHR object containing the response data. * See <a href="http://www.w3.org/TR/XMLHttpRequest/">The XMLHttpRequest Object</a> * for details. * @param {Object} options The options config object passed to the {@link #request} method. */ REQUESTEXCEPTION ); 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; frame.id = frame.name = id; frame.className = 'x-hidden'; frame.src = Ext.SSL_SECURE_URL; // for IE doc.body.appendChild(frame); if(Ext.isIE){ doc.frames[id].name = id; } form.target = id; form.method = POST; form.enctype = form.encoding = 'multipart/form-data'; form.action = url || ""; // 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; } } else { r.responseXML = doc.XMLDocument || doc; } } } catch(e) {} Ext.EventManager.removeListener(frame, LOAD, cb, me); me.fireEvent(REQUESTCOMPLETE, me, r, o); Ext.callback(o.success, o.scope, [r, o]); Ext.callback(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.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) */ /** * @cfg {Object} extraParams (Optional) An object containing properties which are used as * extra parameters to each request made by this object. (defaults to undefined) */ /** * @cfg {Object} defaultHeaders (Optional) An object containing request headers which are added * to each request made by this object. (defaults to undefined) */ /** * @cfg {String} method (Optional) The default HTTP method to be used for requests. * (defaults to undefined; if not set, but {@link #request} params are present, POST will be used; * otherwise, GET will be used.) */ /** * @cfg {Number} timeout (Optional) The timeout in milliseconds to be used for requests. (defaults to 30000) */ timeout : 30000, /** * @cfg {Boolean} autoAbort (Optional) Whether this request should abort any pending requests. (defaults to false) * @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', /** * <p>Sends an HTTP request to a remote server.</p> * <p><b>Important:</b> Ajax server requests are asynchronous, and this call will * return before the response has been received. Process any returned data * in a callback function.</p> * <pre><code>Ext.Ajax.request({ url: 'ajax_demo/sample.json', success: function(response, opts) { var obj = Ext.decode(response.responseText); console.dir(obj); }, failure: function(response, opts) { console.log('server-side failure with status code ' + response.status); }}); * </code></pre> * <p>To execute a callback function in the correct scope, use the <tt>scope</tt> option.</p> * @param {Object} options An object which may contain the following properties:<ul> * <li><b>url</b> : String/Function (Optional)<div class="sub-desc">The URL to * which to send the request, or a function to call which returns a URL string. The scope of the * function is specified by the <tt>scope</tt> option. Defaults to the configured * <tt>{@link #url}</tt>.</div></li> * <li><b>params</b> : Object/String/Function (Optional)<div class="sub-desc"> * An object containing properties which are used as parameters to the * request, a url encoded string or a function to call to get either. The scope of the function * is specified by the <tt>scope</tt> option.</div></li> * <li><b>method</b> : String (Optional)<div class="sub-desc">The HTTP method to use * for the request. Defaults to the configured method, or if no method was configured, * "GET" if no parameters are being sent, and "POST" if parameters are being sent. Note that * the method name is case-sensitive and should be all caps.</div></li> * <li><b>callback</b> : Function (Optional)<div class="sub-desc">The * function to be called upon receipt of the HTTP response. The callback is * called regardless of success or failure and is passed the following * parameters:<ul> * <li><b>options</b> : Object<div class="sub-desc">The parameter to the request call.</div></li> * <li><b>success</b> : Boolean<div class="sub-desc">True if the request succeeded.</div></li> * <li><b>response</b> : Object<div class="sub-desc">The XMLHttpRequest object containing the response data. * See <a href="http://www.w3.org/TR/XMLHttpRequest/">http://www.w3.org/TR/XMLHttpRequest/</a> for details about * accessing elements of the response.</div></li> * </ul></div></li> * <li><a id="request-option-success"></a><b>success</b> : Function (Optional)<div class="sub-desc">The function * to be called upon success of the request. The callback is passed the following * parameters:<ul> * <li><b>response</b> : Object<div class="sub-desc">The XMLHttpRequest object containing the response data.</div></li> * <li><b>options</b> : Object<div class="sub-desc">The parameter to the request call.</div></li> * </ul></div></li>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -