?? connection-debug.js
字號(hào):
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. var io = this.createFrame(secureUri?secureUri:null); // Set form reference and file upload properties to true. 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++){ oElement = oForm.elements[i]; oDisabled = oForm.elements[i].disabled; 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){ if(window.ActiveXObject){ this._sFormData += encodeURIComponent(oName) + '=' + encodeURIComponent(oElement.options[j].attributes['value'].specified?oElement.options[j].value:oElement.options[j].text) + '&'; } else{ this._sFormData += encodeURIComponent(oName) + '=' + encodeURIComponent(oElement.options[j].hasAttribute('value')?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){ if(this._hasSubmitListener && this._submitElementValue){ this._sFormData += this._submitElementValue + '&'; } else{ this._sFormData += encodeURIComponent(oName) + '=' + encodeURIComponent(oValue) + '&'; } hasSubmit = true; } break; default: this._sFormData += encodeURIComponent(oName) + '=' + encodeURIComponent(oValue) + '&'; } } } this._isFormSubmit = true; this._sFormData = this._sFormData.substr(0, this._sFormData.length - 1); YAHOO.log('Form initialized for transaction. HTML form POST message is: ' + this._sFormData, 'info', 'Connection'); 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(window.ActiveXObject){ 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 if(typeof secureURI == 'string'){ // Deprecated io.src = secureUri; } } 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); YAHOO.log('File upload iframe created. Id is:' + frameId, 'info', 'Connection'); }, /** * @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 = []; var postMessage = postData.split('&'); for(var i=0; i < postMessage.length; i++){ var delimitPos = postMessage[i].indexOf('='); if(delimitPos != -1){ formElements[i] = document.createElement('input'); formElements[i].type = 'hidden'; formElements[i].name = postMessage[i].substring(0,delimitPos); formElements[i].value = 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; var uploadEncoding = 'multipart/form-data'; var io = document.getElementById(frameId); var oConn = this; // 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(this._formNode.encoding){ // IE does not respect property enctype for HTML forms. // Instead it uses the property - "encoding". } else{ this._formNode.setAttribute('enctype', uploadEncoding); } if(postData){ var oElements = this.appendPostData(postData); } // Start file upload. this._formNode.submit(); // Fire global custom event -- startEvent this.startEvent.fire(o); if(o.startEvent){ // Fire transaction custom event -- startEvent o.startEvent.fire(o); } // 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){ this._formNode.removeChild(oElements[i]); } } // Restore HTML form attributes to their original // values prior to file upload. for(var 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); if(o.completeEvent){ // Fire transaction custom event -- completeEvent o.completeEvent.fire(o); } var obj = {}; obj.tId = o.tId; obj.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); YAHOO.log('Upload callback.', 'info', 'Connection'); } else{ callback.upload.apply(callback.scope, [obj]); YAHOO.log('Upload callback with scope.', 'info', 'Connection'); } } // Fire global custom event -- completeEvent oConn.uploadEvent.fire(obj); if(o.uploadEvent){ // Fire transaction custom event -- completeEvent o.uploadEvent.fire(obj); } if(YAHOO.util.Event){ YAHOO.util.Event.removeListener(io, "load", uploadCallback); } else if(window.detachEvent){ io.detachEvent('onload', uploadCallback); } else{ io.removeEventListener('load', uploadCallback, false); } setTimeout( function(){ document.body.removeChild(io); oConn.releaseObject(o); YAHOO.log('File upload iframe destroyed. Id is:' + frameId, 'info', 'Connection'); }, 100); }; // Bind the onload handler to the iframe to detect the file upload response. if(YAHOO.util.Event){ YAHOO.util.Event.addListener(io, "load", uploadCallback); } else if(window.attachEvent){ io.attachEvent('onload', uploadCallback); } else{ io.addEventListener('load', uploadCallback, false); } }, /** * @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; if(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.isUpload === true){ var frameId = 'yuiIO' + o.tId; var io = document.getElementById(frameId); if(io){ // Destroy the iframe facilitating the transaction. document.body.removeChild(io); YAHOO.log('File upload iframe destroyed. Id is:' + frameId, 'info', 'Connection'); 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); if(o.abortEvent){ // Fire transaction custom event -- abortEvent o.abortEvent.fire(o); } this.handleTransactionResponse(o, callback, true); YAHOO.log('Transaction ' + o.tId + ' aborted.', 'info', 'Connection'); } else{ YAHOO.log('Transaction ' + o.tId + ' abort call failed. Connection object no longer exists.', 'warn', 'Connection'); } return abortStatus; }, /** * Public method to check 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) { //dereference the XHR instance. if(o.conn){ o.conn = null; } YAHOO.log('Connection object for transaction ' + o.tId + ' destroyed.', 'info', 'Connection'); //dereference the connection object. o = null; }};YAHOO.register("connection", YAHOO.util.Connect, {version: "2.3.0", build: "442"});
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -