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

📄 connection.js

📁 这是YUI的源码及相关示例。里面有很多很炫的Javascript效果。
💻 JS
📖 第 1 页 / 共 3 页
字号:
			// Determine if the argument is a form id or a form name.			// Note form name usage is deprecated by supported			// here for legacy reasons.			oForm = (document.getElementById(formId) || document.forms[formId]);		}		else if(typeof formId == 'object'){			// Treat argument as an HTML form object.			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){			// Create iframe in preparation for file upload.			this.createFrame(secureUri?secureUri:null);			// Set form reference and file upload properties to true.			this._isFormSubmit = true;			this._isFileUpload = true;			this._formNode = oForm;			return;		}		// Iterate over the form elements collection to construct the		// label-value pairs.		for (i=0,len=oForm.elements.length; i<len; ++i){			oElement  = oForm.elements[i];			oDisabled = oElement.disabled;            oName     = oElement.name;			// Do not submit fields that are disabled or			// do not have a name attribute value.			if(!oDisabled && oName)			{                oName  = encodeURIComponent(oName)+'=';                oValue = encodeURIComponent(oElement.value);				switch(oElement.type)				{                    // Safari, Opera, FF all default opt.value from .text if                    // value attribute not specified in markup					case 'select-one':                        if (oElement.selectedIndex > -1) {                            opt = oElement.options[oElement.selectedIndex];                            data[item++] = oName + encodeURIComponent(                                (opt.attributes.value && opt.attributes.value.specified) ? opt.value : opt.text);                        }                        break;					case 'select-multiple':                        if (oElement.selectedIndex > -1) {                            for(j=oElement.selectedIndex, jlen=oElement.options.length; j<jlen; ++j){                                opt = oElement.options[j];                                if (opt.selected) {                                    data[item++] = oName + encodeURIComponent(                                        (opt.attributes.value && opt.attributes.value.specified) ? opt.value : opt.text);                                }                            }                        }						break;					case 'radio':					case 'checkbox':						if(oElement.checked){                            data[item++] = oName + 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){							if(this._hasSubmitListener && this._submitElementValue){                                data[item++] = this._submitElementValue;							}							else{                                data[item++] = oName + oValue;							}							hasSubmit = true;						}						break;					default:                        data[item++] = oName + oValue;				}			}		}		this._isFormSubmit = true;		this._sFormData = data.join('&');		this.initHeader('Content-Type', this._default_form_header);		return this._sFormData;	},  /**   * @description Resets HTML form properties when an HTML form or HTML form   * with file upload transaction is sent.   * @method resetFormState   * @private   * @static   * @return {void}   */	resetFormState:function(){		this._isFormSubmit = false;		this._isFileUpload = false;		this._formNode = null;		this._sFormData = "";	},  /**   * @description Creates an iframe to be used for form file uploads.  It is remove from the   * document upon completion of the upload transaction.   * @method createFrame   * @private   * @static   * @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 object		// properties via createElement().  A different iframe creation		// pattern is required for IE.		var frameId = 'yuiIO' + this._transaction_id;		var io;		if(YAHOO.env.ua.ie){			io = document.createElement('<iframe id="' + frameId + '" name="' + frameId + '" />');			// IE will throw a security exception in an SSL environment if the			// iframe source is undefined.			if(typeof secureUri == 'boolean'){				io.src = 'javascript:false';			}		}		else{			io = document.createElement('iframe');			io.id = frameId;			io.name = frameId;		}		io.style.position = 'absolute';		io.style.top = '-1000px';		io.style.left = '-1000px';		document.body.appendChild(io);	},  /**   * @description Parses the POST data and creates hidden form elements   * for each key-value, and appends them to the HTML form object.   * @method appendPostData   * @private   * @static   * @param {string} postData The HTTP POST data   * @return {array} formElements Collection of hidden fields.   */	appendPostData:function(postData)	{		var formElements = [],			postMessage = postData.split('&'),			i, delimitPos;		for(i=0; i < postMessage.length; i++){			delimitPos = postMessage[i].indexOf('=');			if(delimitPos != -1){				formElements[i] = document.createElement('input');				formElements[i].type = 'hidden';				formElements[i].name = decodeURIComponent(postMessage[i].substring(0,delimitPos));				formElements[i].value = decodeURIComponent(postMessage[i].substring(delimitPos+1));				this._formNode.appendChild(formElements[i]);			}		}		return formElements;	},  /**   * @description Uploads HTML form, inclusive of files/attachments, using the   * iframe created in createFrame to facilitate the transaction.   * @method uploadFile   * @private   * @static   * @param {int} id The transaction id.   * @param {object} callback User-defined callback object.   * @param {string} uri Fully qualified path of resource.   * @param {string} postData POST data to be submitted in addition to HTML form.   * @return {void}   */	uploadFile:function(o, callback, uri, postData){		// Each iframe has an id prefix of "yuiIO" followed		// by the unique transaction id.		var frameId = 'yuiIO' + o.tId,		    uploadEncoding = 'multipart/form-data',		    io = document.getElementById(frameId),		    oConn = this,			args = (callback && callback.argument)?callback.argument:null,            oElements,i,prop,obj;		// Track original HTML form attribute values.		var rawFormAttributes =		{			action:this._formNode.getAttribute('action'),			method:this._formNode.getAttribute('method'),			target:this._formNode.getAttribute('target')		};		// Initialize the HTML form properties in case they are		// not defined in the HTML form.		this._formNode.setAttribute('action', uri);		this._formNode.setAttribute('method', 'POST');		this._formNode.setAttribute('target', frameId);		if(YAHOO.env.ua.ie){			// IE does not respect property enctype for HTML forms.			// Instead it uses the property - "encoding".			this._formNode.setAttribute('encoding', uploadEncoding);		}		else{			this._formNode.setAttribute('enctype', uploadEncoding);		}		if(postData){			oElements = this.appendPostData(postData);		}		// Start file upload.		this._formNode.submit();		// Fire global custom event -- startEvent		this.startEvent.fire(o, args);		if(o.startEvent){			// Fire transaction custom event -- startEvent			o.startEvent.fire(o, args);		}		// Start polling if a callback is present and the timeout		// property has been defined.		if(callback && callback.timeout){			this._timeOut[o.tId] = window.setTimeout(function(){ oConn.abort(o, callback, true); }, callback.timeout);		}		// Remove HTML elements created by appendPostData		if(oElements && oElements.length > 0){			for(i=0; i < oElements.length; i++){				this._formNode.removeChild(oElements[i]);			}		}		// Restore HTML form attributes to their original		// values prior to file upload.		for(prop in rawFormAttributes){			if(YAHOO.lang.hasOwnProperty(rawFormAttributes, prop)){				if(rawFormAttributes[prop]){					this._formNode.setAttribute(prop, rawFormAttributes[prop]);				}				else{					this._formNode.removeAttribute(prop);				}			}		}		// Reset HTML form state properties.		this.resetFormState();		// 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()		{			if(callback && callback.timeout){				window.clearTimeout(oConn._timeOut[o.tId]);				delete oConn._timeOut[o.tId];			}			// Fire global custom event -- completeEvent			oConn.completeEvent.fire(o, args);			if(o.completeEvent){				// Fire transaction custom event -- completeEvent				o.completeEvent.fire(o, args);			}			obj = {			    tId : o.tId,			    argument : callback.argument            };			try			{				// responseText and responseXML will be populated with the same data from the iframe.				// Since the HTTP headers cannot be read from the iframe				obj.responseText = io.contentWindow.document.body?io.contentWindow.document.body.innerHTML:io.contentWindow.document.documentElement.textContent;				obj.responseXML = io.contentWindow.document.XMLDocument?io.contentWindow.document.XMLDocument:io.contentWindow.document;			}			catch(e){}			if(callback && callback.upload){				if(!callback.scope){					callback.upload(obj);				}				else{					callback.upload.apply(callback.scope, [obj]);				}			}			// Fire global custom event -- uploadEvent			oConn.uploadEvent.fire(obj);			if(o.uploadEvent){				// Fire transaction custom event -- uploadEvent				o.uploadEvent.fire(obj);			}			YAHOO.util.Event.removeListener(io, "load", uploadCallback);			setTimeout(				function(){					document.body.removeChild(io);					oConn.releaseObject(o);				}, 100);		};		// Bind the onload handler to the iframe to detect the file upload response.		YAHOO.util.Event.addListener(io, "load", uploadCallback);	},  /**   * @description Method to terminate a transaction, if it has not reached readyState 4.   * @method abort   * @public   * @static   * @param {object} o The connection object returned by asyncRequest.   * @param {object} callback  User-defined callback object.   * @param {string} isTimeout boolean to indicate if abort resulted from a callback timeout.   * @return {boolean}   */	abort:function(o, callback, isTimeout)	{		var abortStatus;		var args = (callback && callback.argument)?callback.argument:null;		if(o && o.conn){			if(this.isCallInProgress(o)){				// Issue abort request				o.conn.abort();				window.clearInterval(this._poll[o.tId]);				delete this._poll[o.tId];				if(isTimeout){					window.clearTimeout(this._timeOut[o.tId]);					delete this._timeOut[o.tId];				}				abortStatus = true;			}		}		else if(o && o.isUpload === true){			var frameId = 'yuiIO' + o.tId;			var io = document.getElementById(frameId);			if(io){				// Remove all listeners on the iframe prior to				// its destruction.				YAHOO.util.Event.removeListener(io, "load");				// Destroy the iframe facilitating the transaction.				document.body.removeChild(io);				if(isTimeout){					window.clearTimeout(this._timeOut[o.tId]);					delete this._timeOut[o.tId];				}				abortStatus = true;			}		}		else{			abortStatus = false;		}		if(abortStatus === true){			// Fire global custom event -- abortEvent			this.abortEvent.fire(o, args);			if(o.abortEvent){				// Fire transaction custom event -- abortEvent				o.abortEvent.fire(o, args);			}			this.handleTransactionResponse(o, callback, true);		}		return abortStatus;	},  /**   * @description Determines if the transaction is still being processed.   * @method isCallInProgress   * @public   * @static   * @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 && o.conn){			return o.conn.readyState !== 4 && o.conn.readyState !== 0;		}		else if(o && o.isUpload === true){			var frameId = 'yuiIO' + o.tId;			return document.getElementById(frameId)?true:false;		}		else{			return false;		}	},  /**   * @description Dereference the XHR instance and the connection object after the transaction is completed.   * @method releaseObject   * @private   * @static   * @param {object} o The connection object   * @return {void}   */	releaseObject:function(o)	{		if(o && o.conn){			//dereference the XHR instance.			o.conn = null;			//dereference the connection object.			o = null;		}	}};YAHOO.register("connection", YAHOO.util.Connect, {version: "2.6.0", build: "1321"});

⌨️ 快捷键说明

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