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

📄 engine.js

📁 dwr3第一个学习例子
💻 JS
📖 第 1 页 / 共 5 页
字号:
          throw new Error("Cross domain file uploads are not possible with this release of DWR");        }        batch.transport = dwr.engine.transport.iframe;      }      else if (isCrossDomain && !dwr.engine.isJaxerServer) {        batch.transport = dwr.engine.transport.scriptTag;      }      // else if (batch.isPoll && dwr.engine.isIE) {      //   batch.transport = dwr.engine.transport.htmlfile;      // }      else {        batch.transport = dwr.engine.transport.xhr;      }      return batch.transport.send(batch);    },    /**     * A generic function to remove all remoting artifacts     * @param {Object} batch The batch that has completed     */    remove:function(batch) {      dwr.engine.transport.iframe.remove(batch);      dwr.engine.transport.xhr.remove(batch);    },    /**     * Called as a result of a request timeout     * @private     * @param {Object} batch The batch that is aborting     */    abort:function(batch) {      if (batch && !batch.completed) {        dwr.engine.batch.remove(batch);        if (batch.req) {          batch.req.abort();        }        dwr.engine.transport.remove(batch);        dwr.engine._handleError(batch, { name:"dwr.engine.timeout", message:"Timeout" });      }    },    /**     * Remoting through XHR     */    xhr:{      /**       * The default HTTP method to use       */      httpMethod:"POST",      /**       * The ActiveX objects to use when we want to do an XMLHttpRequest call.       * TODO: We arrived at this by trial and error. Other toolkits use       * different strings, maybe there is an officially correct version?       */      XMLHTTP:["Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"],      /**       * Setup a batch for transfer through XHR       * @param {Object} batch The batch to alter for XHR transmit       */      send:function(batch) {        if (batch.isPoll) {          batch.map.partialResponse = dwr.engine._partialResponseYes;        }        // Do proxies or IE force us to use early closing mode?        if (batch.isPoll && dwr.engine._pollWithXhr == "true") {          batch.map.partialResponse = dwr.engine._partialResponseNo;        }        if (batch.isPoll && dwr.engine.isIE) {          batch.map.partialResponse = dwr.engine._partialResponseNo;        }        if (window.XMLHttpRequest) {          batch.req = new XMLHttpRequest();        }        else if (window.ActiveXObject) {          batch.req = dwr.engine.util.newActiveXObject(dwr.engine.transport.xhr.XMLHTTP);        }        // Proceed using XMLHttpRequest        if (batch.async == true) {          batch.req.onreadystatechange = function() {            if (typeof dwr != 'undefined') {              dwr.engine.transport.xhr.stateChange(batch);            }          };        }        // If we're polling, record this for monitoring        if (batch.isPoll) {          dwr.engine._pollReq = batch.req;          // In IE XHR is an ActiveX control so you can't augment it like this          if (!dwr.engine.isIE) batch.req.batch = batch;        }        httpMethod = dwr.engine.transport.xhr.httpMethod;        // Workaround for Safari 1.x POST bug        var indexSafari = navigator.userAgent.indexOf("Safari/");        if (indexSafari >= 0) {          var version = navigator.userAgent.substring(indexSafari + 7);          if (parseInt(version, 10) < 400) {            if (dwr.engine._allowGetForSafariButMakeForgeryEasier == "true") {              httpMethod = "GET";            }            else {              dwr.engine._handleWarning(batch, {                name: "dwr.engine.oldSafari",                message: "Safari GET support disabled. See getahead.org/dwr/server/servlet and allowGetForSafariButMakeForgeryEasier."              });            }          }        }        batch.mode = batch.isPoll ? dwr.engine._ModePlainPoll : dwr.engine._ModePlainCall;        var request = dwr.engine.batch.constructRequest(batch, httpMethod);        try {          batch.req.open(httpMethod, request.url, batch.async);          try {            for (var prop in batch.headers) {              var value = batch.headers[prop];              if (typeof value == "string") {                batch.req.setRequestHeader(prop, value);              }            }            if (!batch.headers["Content-Type"]) {              batch.req.setRequestHeader("Content-Type", "text/plain");            }          }          catch (ex) {            dwr.engine._handleWarning(batch, ex);          }          batch.req.send(request.body);          if (batch.async == false) {            dwr.engine.transport.xhr.stateChange(batch);          }        }        catch (ex) {          dwr.engine._handleError(batch, ex);        }        if (batch.isPoll && batch.map.partialResponse == dwr.engine._partialResponseYes) {          dwr.engine.transport.xhr.checkCometPoll();        }        // This is only of any use in sync mode to return the reply data        return batch.reply;      },      /**       * Called by XMLHttpRequest to indicate that something has happened       * @private       * @param {Object} batch The current remote operation       */      stateChange:function(batch) {        var toEval;        if (batch.completed) {          dwr.engine._debug("Error: _stateChange() with batch.completed");          return;        }        var req = batch.req;        try {          var readyState = req.readyState;          var notReady = (req.readyState != 4);          if (notReady) {            return;          }        }        catch (ex) {          dwr.engine._handleWarning(batch, ex);          // It's broken - clear up and forget this call          dwr.engine.batch.remove(batch);          return;        }        if (dwr.engine._unloading && !dwr.engine.isJaxerServer) {          dwr.engine._debug("Ignoring reply from server as page is unloading.");          return;        }        try {          var reply = req.responseText;          reply = dwr.engine._replyRewriteHandler(reply);          var status = req.status; // causes Mozilla to except on page moves          if (reply == null || reply == "") {            dwr.engine._handleWarning(batch, { name:"dwr.engine.missingData", message:"No data received from server" });          }          else if (status != 200) {            dwr.engine._handleError(batch, { name:"dwr.engine.http." + status, message:req.statusText });          }          else {            var contentType = req.getResponseHeader("Content-Type");            if (dwr.engine.isJaxerServer) {              // HACK! Jaxer does something b0rken with Content-Type              contentType = "text/javascript";            }            if (!contentType.match(/^text\/plain/) && !contentType.match(/^text\/javascript/)) {              if (contentType.match(/^text\/html/) && typeof batch.textHtmlHandler == "function") {                batch.textHtmlHandler({ status:status, responseText:reply, contentType:contentType });              }              else {                dwr.engine._handleWarning(batch, { name:"dwr.engine.invalidMimeType", message:"Invalid content type: '" + contentType + "'" });              }            }            else {              // Comet replies might have already partially executed             if (batch.isPoll && batch.map.partialResponse == dwr.engine._partialResponseYes) {                dwr.engine.transport.xhr.processCometResponse(reply, batch);              }              else {                if (reply.search("//#DWR") == -1) {                  dwr.engine._handleWarning(batch, { name:"dwr.engine.invalidReply", message:"Invalid reply from server" });                }                else {                  toEval = reply;                }              }            }          }        }        catch (ex) {          dwr.engine._handleWarning(batch, ex);        }        dwr.engine._callPostHooks(batch);        // Outside of the try/catch so errors propagate normally:        dwr.engine._receivedBatch = batch;        if (toEval != null) toEval = toEval.replace(dwr.engine._scriptTagProtection, "");        dwr.engine._eval(toEval);        dwr.engine._receivedBatch = null;        dwr.engine.batch.validate(batch);        if (!batch.completed) dwr.engine.batch.remove(batch);      },      /**       * Check for reverse Ajax activity       * @private       */      checkCometPoll:function() {        if (dwr.engine._pollReq) {          var req = dwr.engine._pollReq;          var text = req.responseText;          if (text != null) {            dwr.engine.transport.xhr.processCometResponse(text, req.batch);          }        }        // If the poll resources are still there, come back again        if (dwr.engine._pollReq) {          setTimeout(dwr.engine.transport.xhr.checkCometPoll, dwr.engine._pollCometInterval);        }      },      /**       * Some more text might have come in, test and execute the new stuff.       * This method could also be called by the iframe transport       * @private       * @param {Object} response from xhr.responseText       * @param {Object} batch The batch that the XHR object pertains to       */      processCometResponse:function(response, batch) {        if (batch.charsProcessed == response.length) return;        if (response.length == 0) {          batch.charsProcessed = 0;          return;        }        var firstStartTag = response.indexOf("//#DWR-START#", batch.charsProcessed);        if (firstStartTag == -1) {          // dwr.engine._debug("No start tag (search from " + batch.charsProcessed + "). skipping '" + response.substring(batch.charsProcessed) + "'");          batch.charsProcessed = response.length;          return;        }        // if (firstStartTag > 0) {        //   dwr.engine._debug("Start tag not at start (search from " + batch.charsProcessed + "). skipping '" + response.substring(batch.charsProcessed, firstStartTag) + "'");        // }        var lastEndTag = response.lastIndexOf("//#DWR-END#");        if (lastEndTag == -1) {          // dwr.engine._debug("No end tag. unchanged charsProcessed=" + batch.charsProcessed);          return;        }        // Skip the end tag too for next time, remembering CR and LF        if (response.charCodeAt(lastEndTag + 11) == 13 && response.charCodeAt(lastEndTag + 12) == 10) {         batch.charsProcessed = lastEndTag + 13;        }        else {          batch.charsProcessed = lastEndTag + 11;        }        var exec = response.substring(firstStartTag + 13, lastEndTag);        try {          dwr.engine._receivedBatch = batch;          dwr.engine._eval(exec);          dwr.engine._receivedBatch = null;        }        catch (ex) {          // This is one of these annoying points where we might be executing          // while the window is being destroyed. If dwr == null, bail out.          if (dwr != null) {            dwr.engine._handleError(batch, ex);          }        }      },      /**       * Tidy-up when an XHR call is done       * @param {Object} batch       */      remove:function(batch) {        // 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;        }      }    },    /**     * Functions for remoting through IFrame     */    iframe:{      /**       * Setup a batch for transfer through IFrame       * @param {Object} batch The batch to alter for IFrame transmit       */      send:function(batch) {        if (batch.fileUpload) {          batch.httpMethod = "POST";          batch.encType = "multipart/form-data";        }        var idname = dwr.engine.transport.iframe.getId(batch);        batch.div = document.createElement("div");        // Add the div to the document first, otherwise IE 6 will ignore onload handler.        document.body.appendChild(batch.div);        batch.div.innerHTML = "<iframe src='javascript:void(0)' frameborder='0' style='width:0px;height:0px;border:0;' id='" + idname + "' name='" + idname + "' onload='dwr.engine.transport.iframe.loadingComplete(" + batch.map.batchId + ");'></iframe>";        batch.document = document;        dwr.engine.transport.iframe.beginLoader(batch, idname);      },      /**       * Create a unique ID so multiple iframes can fire at the same time       * @param {Object} batch A source of a unique number for the batch       * @return {String} a name prefix for created elements       */      getId:function(batch) {        return batch.isPoll ? "dwr-if-poll-" + batch.map.batchId : "dwr-if-" + batch.map.batchId;      },      /**       * Setup a form or construct a src attribute to use the iframe.       * This is abstracted from send() because the same logic will do for htmlfile       * @param {Object} batch       */      beginLoader:function(batch, idname) {        batch.iframe = batch.document.getElementById(idname);        batch.iframe.batch = batch;        batch.mode = batch.isPoll ? dwr.engine._ModeHtmlPoll : dwr.engine._ModeHtmlCall;        if (batch.isPoll) dwr.engine._outstandingIFrames.push(batch.iframe);

⌨️ 快捷键说明

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