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

📄 engine.js

📁 DWR is the way for AJAX implementation
💻 JS
📖 第 1 页 / 共 4 页
字号:
    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 + -