⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 connection.js

📁 图灵程序设计丛书 JavaScript基础教程源代码
💻 JS
📖 第 1 页 / 共 2 页
字号:
					}					break;				default:					responseObject = this.createResponseObject(o, callback.argument);					if(callback.failure){						if(!callback.scope){							callback.failure(responseObject);						}						else{							callback.failure.apply(callback.scope, [responseObject]);						}					}			}		}		this.releaseObject(o);    },  /**   * This method evaluates the server response, creates and returns the results via   * its properties.  Success and failure cases will differ in the response   * object's property values.   * @private   * @param {object} o The connection object   * @param {} callbackArg User-defined argument or arguments to be passed to the callback   * @return object   */    createResponseObject:function(o, callbackArg)    {		var obj = {};		var headerObj = {};		try		{			var headerStr = o.conn.getAllResponseHeaders();			var header = headerStr.split('\n');			for(var i=0; i < header.length; i++){				var delimitPos = header[i].indexOf(':');				if(delimitPos != -1){					headerObj[header[i].substring(0,delimitPos)] = header[i].substring(delimitPos + 2);				}			}		}		catch(e){}		obj.tId = o.tId;		obj.status = o.conn.status;		obj.statusText = o.conn.statusText;		obj.getResponseHeader = headerObj;		obj.getAllResponseHeaders = headerStr;		obj.responseText = o.conn.responseText;		obj.responseXML = o.conn.responseXML;		if(typeof callbackArg !== undefined){			obj.argument = callbackArg;		}		return obj;    },  /**   * If a transaction cannot be completed due to dropped or closed connections,   * there may be not be enough information to build a full response object.   * The failure callback will be fired and this specific condition can be identified   * by a status property value of 0.   *   * If an abort was successful, the status property will report a value of -1.   *   * @private   * @param {int} tId Transaction Id   * @param callbackArg The user-defined arguments   * @param isAbort Determines if the exception is an abort.   * @return object   */    createExceptionObject:function(tId, callbackArg, isAbort)    {		var COMM_CODE = 0;		var COMM_ERROR = 'communication failure';		var ABORT_CODE = -1;		var ABORT_ERROR = 'transaction aborted';		var obj = {};		obj.tId = tId;		if(isAbort){			obj.status = ABORT_CODE;			obj.statusText = ABORT_ERROR;		}		else{			obj.status = COMM_CODE;			obj.statusText = COMM_ERROR;		}		if(callbackArg){			obj.argument = callbackArg;		}		return obj;    },  /**   * Public method that stores the custom HTTP headers for each transaction.   * @public   * @param {string} label The HTTP header label   * @param {string} value The HTTP header value   * @return void   */	initHeader:function(label,value)	{		if(this._http_header[label] === undefined){			this._http_header[label] = value;		}		else{			this._http_header[label] =  value + "," + this._http_header[label];		}		this._has_http_headers = true;	},  /**   * Accessor that sets the HTTP headers for each transaction.   * @private   * @param {object} o The connection object for the transaction.   * @return void   */	setHeader:function(o)	{		for(var prop in this._http_header){			if(this._http_header.propertyIsEnumerable){				o.conn.setRequestHeader(prop, this._http_header[prop]);			}		}		delete this._http_header;		this._http_header = {};		this._has_http_headers = false;	},  /**   * This method assembles the form label and value pairs and   * constructs an encoded string.   * asyncRequest() will automatically initialize the   * transaction with a HTTP header Content-Type of   * application/x-www-form-urlencoded.   * @public   * @param {string || object} form id or name attribute, or form object.   * @param {string} optional boolean to indicate SSL environment.   * @param {string} optional qualified path of iframe resource for SSL in IE.   * @return void   */	setForm:function(formId, isUpload, secureUri)	{		this._sFormData = '';		if(typeof formId == 'string'){			// Determine if the argument is a form id or a form name.			// Note form name usage is deprecated by supported			// here for legacy reasons.			var oForm = (document.getElementById(formId) || document.forms[formId]);		}		else if(typeof formId == 'object'){			var oForm = formId;		}		else{			return;		}		// If the isUpload argument is true, setForm will call createFrame to initialize		// an iframe as the form target.		//		// The argument secureURI is also required by IE in SSL environments		// where the secureURI string is a fully qualified HTTP path, used to set the source		// of the iframe, to a stub resource in the same domain.		if(isUpload){			(typeof secureUri == 'string')?this.createFrame(secureUri):this.createFrame();			this._isFormSubmit = true;			this._isFileUpload = true;			this._formNode = oForm;			return;		}		var oElement, oName, oValue, oDisabled;		var hasSubmit = false;		// Iterate over the form elements collection to construct the		// label-value pairs.		for (var i=0; i<oForm.elements.length; i++){			oDisabled = oForm.elements[i].disabled;			// If the name attribute is not populated, the form field's			// value will not be submitted.			oElement = oForm.elements[i];			oName = oForm.elements[i].name;			oValue = oForm.elements[i].value;			// Do not submit fields that are disabled or			// do not have a name attribute value.			if(!oDisabled && oName)			{				switch (oElement.type)				{					case 'select-one':					case 'select-multiple':						for(var j=0; j<oElement.options.length; j++){							if(oElement.options[j].selected){									this._sFormData += encodeURIComponent(oName) + '=' + encodeURIComponent(oElement.options[j].value || oElement.options[j].text) + '&';							}						}						break;					case 'radio':					case 'checkbox':						if(oElement.checked){							this._sFormData += encodeURIComponent(oName) + '=' + encodeURIComponent(oValue) + '&';						}						break;					case 'file':						// stub case as XMLHttpRequest will only send the file path as a string.					case undefined:						// stub case for fieldset element which returns undefined.					case 'reset':						// stub case for input type reset button.					case 'button':						// stub case for input type button elements.						break;					case 'submit':						if(hasSubmit == false){							this._sFormData += encodeURIComponent(oName) + '=' + encodeURIComponent(oValue) + '&';							hasSubmit = true;						}						break;					default:						this._sFormData += encodeURIComponent(oName) + '=' + encodeURIComponent(oValue) + '&';						break;				}			}		}		this._isFormSubmit = true;		this._sFormData = this._sFormData.substr(0, this._sFormData.length - 1);	},  /**   * Creates an iframe to be used for form file uploads.  It is remove from the   * document upon completion of the upload transaction.   *   * @private   * @param {string} optional qualified path of iframe resource for SSL in IE.   * @return void   */	createFrame:function(secureUri){		// IE does not allow the setting of id and name attributes as DOM		// properties.  A different iframe creation pattern is required for IE.		if(window.ActiveXObject){			var io = document.createElement('<IFRAME name="ioFrame" id="ioFrame">');			if(secureUri){				// IE will throw a security exception in an SSL environment if the				// iframe source isn't set to a valid resource.				io.src = secureUri;			}		}		else{			var io = document.createElement('IFRAME');			io.id = 'ioFrame';			io.name = 'ioFrame';		}		io.style.position = 'absolute';		io.style.top = '-1000px';		io.style.left = '-1000px';		document.body.appendChild(io);	},  /**   * Uploads HTML form, including files/attachments,  targeting the   * iframe created in createFrame.   *   * @private   * @param {int} id The transaction id.   * @param {object} callback - User-defined callback object.   * @param {string} uri Fully qualified path of resource.   * @return void   */	uploadFile:function(id, callback, uri){		// Initialize the HTML form properties in case they are		// not defined in the HTML form.		this._formNode.action = uri;		this._formNode.enctype = 'multipart/form-data';		this._formNode.method = 'POST';		this._formNode.target = 'ioFrame';		this._formNode.submit();		// Reset form status properties.		this._formNode = null;		this._isFileUpload = false;		this._isFormSubmit = false;		// Create the upload callback handler that fires when the iframe		// receives the load event.  Subsequently, the event handler is detached		// and the iframe removed from the document.		var uploadCallback = function()		{			var oResponse =			{				tId: id,				responseText: document.getElementById("ioFrame").contentWindow.document.body.innerHTML,				argument: callback.argument			}			if(callback.upload){				if(!callback.scope){					callback.upload(oResponse);				}				else{					callback.upload.apply(callback.scope, [oResponse]);				}			}			YAHOO.util.Event.removeListener("ioFrame", "load", uploadCallback);			window.ioFrame.location.replace('#');			setTimeout("document.body.removeChild(document.getElementById('ioFrame'))",100);		};		// Bind the onload handler to the iframe to detect the file upload response.		YAHOO.util.Event.addListener("ioFrame", "load", uploadCallback);	},  /**   * Public method to terminate a transaction, if it has not reached readyState 4.   * @public   * @param {object} o The connection object returned by asyncRequest.   * @param {object} callback  User-defined callback object.   * @param {string} isTimeout boolean to indicate if abort was a timeout.   * @return void   */	abort:function(o, callback, isTimeout)	{		if(this.isCallInProgress(o)){			window.clearInterval(this._poll[o.tId]);			this._poll.splice(o.tId);			if(isTimeout){				this._timeOut.splice(o.tId);			}			o.conn.abort();			this.handleTransactionResponse(o, callback, true);			return true;		}		else{			return false;		}	},  /**   * Public method to check if the transaction is still being processed.   * @public   * @param {object} o The connection object returned by asyncRequest   * @return boolean   */	isCallInProgress:function(o)	{		// if the XHR object assigned to the transaction has not been dereferenced,		// then check its readyState status.  Otherwise, return false.		if(o.conn){			return o.conn.readyState != 4 && o.conn.readyState != 0;		}		else{			//The XHR object has been destroyed.			return false;		}	},  /**   * Dereference the XHR instance and the connection object after the transaction is completed.   * @private   * @param {object} o The connection object   * @return void   */	releaseObject:function(o)	{		//dereference the XHR instance.		o.conn = null;		//dereference the connection object.		o = null;	}};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -