?? engine.js
字號:
batch.postHooks = null; }};/** @private A call has finished by whatever means and we need to shut it all down. */dwr.engine._clearUp = function(batch) { if (!batch) { dwr.engine._debug("Warning: null batch in dwr.engine._clearUp()", true); return; } if (batch.completed) { dwr.engine._debug("Warning: Double complete", true); return; } // IFrame tidyup if (batch.div) batch.div.parentNode.removeChild(batch.div); if (batch.iframe) { // If this is a poll frame then stop comet polling for (var i = 0; i < dwr.engine._outstandingIFrames.length; i++) { if (dwr.engine._outstandingIFrames[i] == batch.iframe) { dwr.engine._outstandingIFrames.splice(i, 1); } } batch.iframe.parentNode.removeChild(batch.iframe); } if (batch.form) batch.form.parentNode.removeChild(batch.form); // XHR tidyup: avoid IE handles increase if (batch.req) { // If this is a poll frame then stop comet polling if (batch.req == dwr.engine._pollReq) dwr.engine._pollReq = null; delete batch.req; } // Timeout tidyup if (batch.timeoutId) { clearTimeout(batch.timeoutId); delete batch.timeoutId; } if (batch.map && (batch.map.batchId || batch.map.batchId == 0)) { delete dwr.engine._batches[batch.map.batchId]; dwr.engine._batchesLength--; } batch.completed = true; // If there is anything on the queue waiting to go out, then send it. // We don't need to check for ordered mode, here because when ordered mode // gets turned off, we still process *waiting* batches in an ordered way. if (dwr.engine._batchQueue.length != 0) { var sendbatch = dwr.engine._batchQueue.shift(); dwr.engine._sendData(sendbatch); }};/** @private Abort any XHRs in progress at page unload (solves zombie socket problems in IE). */dwr.engine._unloader = function() { dwr.engine._unloading = true; // Empty queue of waiting ordered requests dwr.engine._batchQueue.length = 0; // Abort any ongoing XHRs and clear their batches for (var batchId in dwr.engine._batches) { var batch = dwr.engine._batches[batchId]; // Only process objects that look like batches (avoid prototype additions!) if (batch && batch.map) { if (batch.req) { batch.req.abort(); } dwr.engine._clearUp(batch); } }};// Now register the unload handlerif (window.addEventListener) window.addEventListener('unload', dwr.engine._unloader, false);else if (window.attachEvent) window.attachEvent('onunload', dwr.engine._unloader);/** @private Generic error handling routing to save having null checks everywhere */dwr.engine._handleError = function(batch, ex) { if (typeof ex == "string") ex = { name:"unknown", message:ex }; if (ex.message == null) ex.message = ""; if (ex.name == null) ex.name = "unknown"; if (batch && typeof batch.errorHandler == "function") batch.errorHandler(ex.message, ex); else if (dwr.engine._errorHandler) dwr.engine._errorHandler(ex.message, ex); if (batch) dwr.engine._clearUp(batch);};/** @private Generic error handling routing to save having null checks everywhere */dwr.engine._handleWarning = function(batch, ex) { if (typeof ex == "string") ex = { name:"unknown", message:ex }; if (ex.message == null) ex.message = ""; if (ex.name == null) ex.name = "unknown"; if (batch && typeof batch.warningHandler == "function") batch.warningHandler(ex.message, ex); else if (dwr.engine._warningHandler) dwr.engine._warningHandler(ex.message, ex); if (batch) dwr.engine._clearUp(batch);};/** * @private Marshall a data item * @param batch A map of variables to how they have been marshalled * @param referto An array of already marshalled variables to prevent recurrsion * @param data The data to be marshalled * @param name The name of the data being marshalled */dwr.engine._serializeAll = function(batch, referto, data, name) { if (data == null) { batch.map[name] = "null:null"; return; } switch (typeof data) { case "boolean": batch.map[name] = "boolean:" + data; break; case "number": batch.map[name] = "number:" + data; break; case "string": batch.map[name] = "string:" + encodeURIComponent(data); break; case "object": if (data instanceof String) batch.map[name] = "String:" + encodeURIComponent(data); else if (data instanceof Boolean) batch.map[name] = "Boolean:" + data; else if (data instanceof Number) batch.map[name] = "Number:" + data; else if (data instanceof Date) batch.map[name] = "Date:" + data.getTime(); else if (data && data.join) batch.map[name] = dwr.engine._serializeArray(batch, referto, data, name); else batch.map[name] = dwr.engine._serializeObject(batch, referto, data, name); break; case "function": // We just ignore functions. break; default: dwr.engine._handleWarning(null, { name:"dwr.engine.unexpectedType", message:"Unexpected type: " + typeof data + ", attempting default converter." }); batch.map[name] = "default:" + data; break; }};/** @private Have we already converted this object? */dwr.engine._lookup = function(referto, data, name) { var lookup; // Can't use a map: getahead.org/ajax/javascript-gotchas for (var i = 0; i < referto.length; i++) { if (referto[i].data == data) { lookup = referto[i]; break; } } if (lookup) return "reference:" + lookup.name; referto.push({ data:data, name:name }); return null;};/** @private Marshall an object */dwr.engine._serializeObject = function(batch, referto, data, name) { var ref = dwr.engine._lookup(referto, data, name); if (ref) return ref; // This check for an HTML is not complete, but is there a better way? // Maybe we should add: data.hasChildNodes typeof "function" == true if (data.nodeName && data.nodeType) { return dwr.engine._serializeXml(batch, referto, data, name); } // treat objects as an associative arrays var reply = "Object_" + dwr.engine._getObjectClassName(data) + ":{"; var element; for (element in data) { if (typeof data[element] != "function") { batch.paramCount++; var childName = "c" + dwr.engine._batch.map.callCount + "-e" + batch.paramCount; dwr.engine._serializeAll(batch, referto, data[element], childName); reply += encodeURIComponent(element) + ":reference:" + childName + ", "; } } if (reply.substring(reply.length - 2) == ", ") { reply = reply.substring(0, reply.length - 2); } reply += "}"; return reply;};/** @private Returns the classname of supplied argument obj */dwr.engine._errorClasses = { "Error":Error, "EvalError":EvalError, "RangeError":RangeError, "ReferenceError":ReferenceError, "SyntaxError":SyntaxError, "TypeError":TypeError, "URIError":URIError };dwr.engine._getObjectClassName = function(obj) { // Try to find the classname by stringifying the object's constructor // and extract <class> from "function <class>". if (obj && obj.constructor && obj.constructor.toString) { var str = obj.constructor.toString(); var regexpmatch = str.match(/function\s+(\w+)/); if (regexpmatch && regexpmatch.length == 2) { return regexpmatch[1]; } } // Now manually test against the core Error classes, as these in some // browsers successfully match to the wrong class in the // Object.toString() test we will do later if (obj && obj.constructor) { for (var errorname in dwr.engine._errorClasses) { if (obj.constructor == dwr.engine._errorClasses[errorname]) return errorname; } } // Try to find the classname by calling Object.toString() on the object // and extracting <class> from "[object <class>]" if (obj) { var str = Object.prototype.toString.call(obj); var regexpmatch = str.match(/\[object\s+(\w+)/); if (regexpmatch && regexpmatch.length==2) { return regexpmatch[1]; } } // Supplied argument was probably not an object, but what is better? return "Object";};/** @private Marshall an object */dwr.engine._serializeXml = function(batch, referto, data, name) { var ref = dwr.engine._lookup(referto, data, name); if (ref) return ref; var output; if (window.XMLSerializer) output = new XMLSerializer().serializeToString(data); else if (data.toXml) output = data.toXml; else output = data.innerHTML; return "XML:" + encodeURIComponent(output);};/** @private Marshall an array */dwr.engine._serializeArray = function(batch, referto, data, name) { var ref = dwr.engine._lookup(referto, data, name); if (ref) return ref; if (document.all && !window.opera) { // Use array joining on IE (fastest) var buf = ["Array:["]; for (var i = 0; i < data.length; i++) { if (i != 0) buf.push(","); batch.paramCount++; var childName = "c" + dwr.engine._batch.map.callCount + "-e" + batch.paramCount; dwr.engine._serializeAll(batch, referto, data[i], childName); buf.push("reference:"); buf.push(childName); } buf.push("]"); reply = buf.join(""); } else { // Use string concat on other browsers (fastest) var reply = "Array:["; for (var i = 0; i < data.length; i++) { if (i != 0) reply += ","; batch.paramCount++; var childName = "c" + dwr.engine._batch.map.callCount + "-e" + batch.paramCount; dwr.engine._serializeAll(batch, referto, data[i], childName); reply += "reference:"; reply += childName; } reply += "]"; } return reply;};/** @private Convert an XML string into a DOM object. */dwr.engine._unserializeDocument = function(xml) { var dom; if (window.DOMParser) { var parser = new DOMParser(); dom = parser.parseFromString(xml, "text/xml"); if (!dom.documentElement || dom.documentElement.tagName == "parsererror") { var message = dom.documentElement.firstChild.data; message += "\n" + dom.documentElement.firstChild.nextSibling.firstChild.data; throw message; } return dom; } else if (window.ActiveXObject) { dom = dwr.engine._newActiveXObject(dwr.engine._DOMDocument); dom.loadXML(xml); // What happens on parse fail with IE? return dom; } else { var div = document.createElement("div"); div.innerHTML = xml; return div; }};/** @param axarray An array of strings to attempt to create ActiveX objects from */dwr.engine._newActiveXObject = function(axarray) { var returnValue; for (var i = 0; i < axarray.length; i++) { try { returnValue = new ActiveXObject(axarray[i]); break; } catch (ex) { /* ignore */ } } return returnValue;};/** @private Used internally when some message needs to get to the programmer */dwr.engine._debug = function(message, stacktrace) { var written = false; try { if (window.console) { if (stacktrace && window.console.trace) window.console.trace(); window.console.log(message); written = true; } else if (window.opera && window.opera.postError) { window.opera.postError(message); written = true; } } catch (ex) { /* ignore */ } if (!written) { var debug = document.getElementById("dwr-debug"); if (debug) { var contents = message + "<br/>" + debug.innerHTML; if (contents.length > 2048) contents = contents.substring(0, 2048); debug.innerHTML = contents; } }};
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -