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

📄 engine.js

📁 dwr3第一个学习例子
💻 JS
📖 第 1 页 / 共 5 页
字号:
      if (ex.message == undefined) ex.message = "";      dwr.engine._handleError(dwr.engine._receivedBatch, ex);      if (searchBatch) {        dwr.engine._receivedBatch = null;        dwr.engine.batch.remove(dwr.engine._batches[batchId]);      }    },    /**     * Called by the server when we need to set a new script session id     * @param {Object} newSessionId The new script session id to be used from now     */    handleNewScriptSession:function(newSessionId) {      if (dwr.engine._scriptSessionId != null) {        dwr.engine._debug("Server side script session id timed out. New session automatically created");      }      dwr.engine._scriptSessionId = newSessionId;    },    /**     * Called by the server when we need to set a new script session id     * @param {Object} newSessionId The new script session id to be used from now     */    handleNewWindowName:function(windowName) {      dwr.engine._debug("Setting new window name: " + windowName);      if (window.name != null && window.name != "") {        dwr.engine._debug("- Warning: This will override existing name of: " + window.name);      }      window.name = windowName;    },    /**     * Execute some script in a different window     * @param {Object} windowName The name of the window in which to eval the script     * @param {Object} script The script to eval elsewhere     */    handleForeign:function(windowName, script) {      var foreign = window.open(null, windowName);      if (foreign != null) {        if (foreign.dwr != null) {          foreign.dwr.engine._eval(script);        }        else {          dwr.engine._debug("Found window, but DWR did not exist in it");        }      }      else {        dwr.engine._debug("Could not find window");      }    },    /**     * Called by the server: Reverse ajax should not be used     * @private     * @param {Object} ex     * @param {int} batchId     */    pollCometDisabled:function(ex, batchId){      dwr.engine.setActiveReverseAjax(false);      var searchBatch = (dwr.engine._receivedBatch == null && batchId != null);      if (searchBatch) {        dwr.engine._receivedBatch = dwr.engine._batches[batchId];      }      if (ex.message == undefined) {        ex.message = "";      }      dwr.engine._handleError(dwr.engine._receivedBatch, ex);      if (searchBatch) {        dwr.engine._receivedBatch = null;        dwr.engine.batch.remove(dwr.engine._batches[batchId]);      }    },    /**     * Called by the server: Create a new object of a mapped class     * @private     * @param {string} dwrClassName the name of the mapped class     * @param {Object} memberMap the object's data members     */    newObject:function(dwrClassName, memberMap){      var classfunc = dwr.engine._mappedClasses[dwrClassName];       if (classfunc && classfunc.createFromMap) {        return classfunc.createFromMap(memberMap);      }      else {        memberMap.$dwrClassName = dwrClassName;        return memberMap;      }    }  };  /**   * Functions to serialize a data set into a list of parameters   */  dwr.engine.serialize = {    /**     * ActiveX objects to use when we want to convert an xml string into a DOM object     */    domDocument:[      "Msxml2.DOMDocument.6.0",      "Msxml2.DOMDocument.5.0",      "Msxml2.DOMDocument.4.0",      "Msxml2.DOMDocument.3.0",      "MSXML2.DOMDocument",      "MSXML.DOMDocument",      "Microsoft.XMLDOM"    ],    /**     * A holder for functions that we have serialized for remote calling.     */    remoteFunctions:{},    /**     * The ID of the next function that we serialize     */    funcId:0,    /**     * Convert a text representation of XML into a DOM element     * @param {String} xml An xml string     */    toDomElement:function(xml) {      return dwr.engine.serialize.toDomDocument(xml).documentElement;    },    /**     * Convert a text representation of XML into a DOM document     * @param {String} xml An xml string     */    toDomDocument: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.util.newActiveXObject(dwr.engine.serialize.domDocument);        dom.loadXML(xml); // What happens on parse fail with IE?        return dom;      }      else {        var div = document.createElement("div");        div.innerHTML = xml;        return div;      }    },    /**     * Marshall a data item     * @private     * @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     */    convert:function(batch, referto, data, name, depth) {      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":        var ref = dwr.engine.serialize.lookup(referto, data, name);        var objstr = Object.prototype.toString.call(data);        if (data.$dwrByRef) batch.map[name] = dwr.engine.serialize.convertByReference(batch, referto, data, name, depth + 1);        else if (ref != null) batch.map[name] = ref;        else if (objstr == "[object String]") batch.map[name] = "string:" + encodeURIComponent(data);        else if (objstr == "[object Boolean]") batch.map[name] = "boolean:" + data;        else if (objstr == "[object Number]") batch.map[name] = "number:" + data;        else if (objstr == "[object Date]") batch.map[name] = "date:" + data.getTime();        else if (objstr == "[object Array]") batch.map[name] = dwr.engine.serialize.convertArray(batch, referto, data, name, depth + 1);        else if (data && data.tagName && data.tagName.toLowerCase() == "input" && data.type && data.type.toLowerCase() == "file") {          batch.fileUpload = true;          batch.map[name] = data;        }        else {          // 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) {            batch.map[name] = dwr.engine.serialize.convertXml(batch, referto, data, name, depth + 1);          }          else {            batch.map[name] = dwr.engine.serialize.convertObject(batch, referto, data, name, depth + 1);          }        }        break;      case "function":        // Ignore functions unless they are directly passed in        if (depth == 0) {          batch.map[name] = dwr.engine.serialize.convertByReference(batch, referto, data, name, depth + 1);        }        break;      default:        dwr.engine._handleWarning(null, { name:"dwr.engine.unexpectedType", message:"Unexpected type: " + typeof data + ", attempting default converter." });        batch.map[name] = "default:" + data;        break;      }    },    /**     * Marshall an object by reference     * @private     * @see dwr.engine.serialize.convert() for parameter details     */    convertByReference:function(batch, referto, data, name, depth) {      var funcId = "f" + dwr.engine.serialize.funcId;      dwr.engine.serialize.remoteFunctions[funcId] = data;      dwr.engine.serialize.funcId++;      return "byref:" + funcId;    },    /**     * Marshall an array     * @private     * @see dwr.engine.serialize.convert() for parameter details     */    convertArray:function(batch, referto, data, name, depth) {      var childName, i;      if (dwr.engine.isIE <= 7) {        // Use array joining on IE1-7 (fastest)        var buf = ["array:["];        for (i = 0; i < data.length; i++) {          if (i != 0) buf.push(",");          batch.paramCount++;          childName = "c" + dwr.engine._batch.map.callCount + "-e" + batch.paramCount;          dwr.engine.serialize.convert(batch, referto, data[i], childName, depth + 1);          buf.push("reference:");          buf.push(childName);        }        buf.push("]");        reply = buf.join("");      }      else {        // Use string concat on other browsers (fastest)        var reply = "array:[";        for (i = 0; i < data.length; i++) {          if (i != 0) reply += ",";          batch.paramCount++;          childName = "c" + dwr.engine._batch.map.callCount + "-e" + batch.paramCount;          dwr.engine.serialize.convert(batch, referto, data[i], childName, depth + 1);          reply += "reference:";          reply += childName;        }        reply += "]";      }      return reply;    },    /**     * Marshall an object by value     * @private     * @see dwr.engine.serialize.convert() for parameter details     */    convertObject:function(batch, referto, data, name, depth) {      // treat objects as an associative arrays      var reply = "Object_" + dwr.engine.serialize.getObjectClassName(data) + ":{";      var elementset = (data.constructor && data.constructor.$dwrClassMembers ? data.constructor.$dwrClassMembers : data);      var element;      for (element in elementset) {        if (typeof data[element] != "function") {          batch.paramCount++;          var childName = "c" + dwr.engine._batch.map.callCount + "-e" + batch.paramCount;          dwr.engine.serialize.convert(batch, referto, data[element], childName, depth + 1);          reply += encodeURIComponent(element) + ":reference:" + childName + ", ";        }      }      if (reply.substring(reply.length - 2) == ", ") {        reply = reply.substring(0, reply.length - 2);      }      reply += "}";      return reply;    },    /**     * Marshall an object     * @private     * @see dwr.engine.serialize.convert() for parameter details     */    convertXml:function(batch, referto, data, name, depth) {      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);    },    /**     * Have we already converted this object?     * @private     * @see dwr.engine.serialize.convert() for parameter details     */    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;    },    /**     * Returns the classname of supplied argument obj. Similar to typeof, but     * which returns the name of the constructor that created the object rather     * than 'object'     * @private     * @param {Object} obj The object to detect the type of     * @return The name of the object     */    getObjectClassName:function(obj) {      // Different handling depending on if, and what type of, class-mapping is used      if (obj.$dwrClassName)        return obj.$dwrClassName; // Light class-mapping uses the classname from a property on the instance      else if (obj.constructor && obj.constructor.$dwrClassName)        return obj.constructor.$dwrClassName; // Full class-mapping uses the classname from a property on the constructor function      else        return "Object";    }  };  /**   * Functions to handle the various remoting transport   */  dwr.engine.transport = {    /**     * Actually send the block of data in the batch object.     * @private     * @param {Object} batch     */    send:function(batch) {      dwr.engine.batch.prepareToSend(batch);      // Work out if we are going cross domain      var isCrossDomain = false;      if (batch.path == null) {        batch.path = dwr.engine._pathToDwrServlet;      }      if (batch.path.indexOf("http://") == 0 || batch.path.indexOf("https://") == 0) {        var dwrShortPath = dwr.engine._pathToDwrServlet.split("/", 3).join("/");        var hrefShortPath = window.location.href.split("/", 3).join("/");        isCrossDomain = (dwrShortPath != hrefShortPath);      }      if (batch.fileUpload) {        if (isCrossDomain) {

⌨️ 快捷键说明

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