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

📄 engine.js

📁 实现自动刷新页面 本例实现页面自动刷新的效果
💻 JS
📖 第 1 页 / 共 3 页
字号:
/* * Copyright 2005 Joe Walker * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * *     http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *//** * Declare an object to which we can add real functions. */if (dwr == null) var dwr = {};if (dwr.engine == null) dwr.engine = {};if (DWREngine == null) var DWREngine = dwr.engine;/** * Set an alternative error handler from the default alert box. * @see getahead.org/dwr/browser/engine/errors */dwr.engine.setErrorHandler = function(handler) {  dwr.engine._errorHandler = handler;};/** * Set an alternative warning handler from the default alert box. * @see getahead.org/dwr/browser/engine/errors */dwr.engine.setWarningHandler = function(handler) {  dwr.engine._warningHandler = handler;};/** * Setter for the text/html handler - what happens if a DWR request gets an HTML * reply rather than the expected Javascript. Often due to login timeout */dwr.engine.setTextHtmlHandler = function(handler) {  dwr.engine._textHtmlHandler = handler;}/** * Set a default timeout value for all calls. 0 (the default) turns timeouts off. * @see getahead.org/dwr/browser/engine/errors */dwr.engine.setTimeout = function(timeout) {  dwr.engine._timeout = timeout;};/** * The Pre-Hook is called before any DWR remoting is done. * @see getahead.org/dwr/browser/engine/hooks */dwr.engine.setPreHook = function(handler) {  dwr.engine._preHook = handler;};/** * The Post-Hook is called after any DWR remoting is done. * @see getahead.org/dwr/browser/engine/hooks */dwr.engine.setPostHook = function(handler) {  dwr.engine._postHook = handler;};/** * Custom headers for all DWR calls * @see getahead.org/dwr/???? */dwr.engine.setHeaders = function(headers) {  dwr.engine._headers = headers;};/** * Custom parameters for all DWR calls * @see getahead.org/dwr/???? */dwr.engine.setParameters = function(parameters) {  dwr.engine._parameters = parameters;};/** XHR remoting type constant. See dwr.engine.set[Rpc|Poll]Type() */dwr.engine.XMLHttpRequest = 1;/** XHR remoting type constant. See dwr.engine.set[Rpc|Poll]Type() */dwr.engine.IFrame = 2;/** XHR remoting type constant. See dwr.engine.setRpcType() */dwr.engine.ScriptTag = 3;/** * Set the preferred remoting type. * @param newType One of dwr.engine.XMLHttpRequest or dwr.engine.IFrame or dwr.engine.ScriptTag * @see getahead.org/dwr/browser/engine/options */dwr.engine.setRpcType = function(newType) {  if (newType != dwr.engine.XMLHttpRequest && newType != dwr.engine.IFrame && newType != dwr.engine.ScriptTag) {    dwr.engine._handleError(null, { name:"dwr.engine.invalidRpcType", message:"RpcType must be one of dwr.engine.XMLHttpRequest or dwr.engine.IFrame or dwr.engine.ScriptTag" });    return;  }  dwr.engine._rpcType = newType;};/** * Which HTTP method do we use to send results? Must be one of "GET" or "POST". * @see getahead.org/dwr/browser/engine/options */dwr.engine.setHttpMethod = function(httpMethod) {  if (httpMethod != "GET" && httpMethod != "POST") {    dwr.engine._handleError(null, { name:"dwr.engine.invalidHttpMethod", message:"Remoting method must be one of GET or POST" });    return;  }  dwr.engine._httpMethod = httpMethod;};/** * Ensure that remote calls happen in the order in which they were sent? (Default: false) * @see getahead.org/dwr/browser/engine/ordering */dwr.engine.setOrdered = function(ordered) {  dwr.engine._ordered = ordered;};/** * Do we ask the XHR object to be asynchronous? (Default: true) * @see getahead.org/dwr/browser/engine/options */dwr.engine.setAsync = function(async) {  dwr.engine._async = async;};/** * Does DWR poll the server for updates? (Default: false) * @see getahead.org/dwr/browser/engine/options */dwr.engine.setActiveReverseAjax = function(activeReverseAjax) {  if (activeReverseAjax) {    // Bail if we are already started    if (dwr.engine._activeReverseAjax) return;    dwr.engine._activeReverseAjax = true;    dwr.engine._poll();  }  else {    // Can we cancel an existing request?    if (dwr.engine._activeReverseAjax && dwr.engine._pollReq) dwr.engine._pollReq.abort();    dwr.engine._activeReverseAjax = false;  }  // TODO: in iframe mode, if we start, stop, start then the second start may  // well kick off a second iframe while the first is still about to return  // we should cope with this but we don't};/** * Set the preferred polling type. * @param newPollType One of dwr.engine.XMLHttpRequest or dwr.engine.IFrame * @see getahead.org/dwr/browser/engine/options */dwr.engine.setPollType = function(newPollType) {  if (newPollType != dwr.engine.XMLHttpRequest && newPollType != dwr.engine.IFrame) {    dwr.engine._handleError(null, { name:"dwr.engine.invalidPollType", message:"PollType must be one of dwr.engine.XMLHttpRequest or dwr.engine.IFrame"  });    return;  }  dwr.engine._pollType = newPollType;};/** * The default message handler. * @see getahead.org/dwr/browser/engine/errors */dwr.engine.defaultErrorHandler = function(message, ex) {  dwr.engine._debug("Error: " + ex.name + ", " + ex.message, true);  if (message == null || message == "") alert("A server error has occured. More information may be available in the console.");  // Ignore NS_ERROR_NOT_AVAILABLE if Mozilla is being narky  else if (message.indexOf("0x80040111") != -1) dwr.engine._debug(message);  else alert(message);};/** * The default warning handler. * @see getahead.org/dwr/browser/engine/errors */dwr.engine.defaultWarningHandler = function(message, ex) {  dwr.engine._debug(message);};/** * For reduced latency you can group several remote calls together using a batch. * @see getahead.org/dwr/browser/engine/batch */dwr.engine.beginBatch = function() {  if (dwr.engine._batch) {    dwr.engine._handleError(null, { name:"dwr.engine.batchBegun", message:"Batch already begun" });    return;  }  dwr.engine._batch = dwr.engine._createBatch();};/** * Finished grouping a set of remote calls together. Go and execute them all. * @see getahead.org/dwr/browser/engine/batch */dwr.engine.endBatch = function(options) {  var batch = dwr.engine._batch;  if (batch == null) {    dwr.engine._handleError(null, { name:"dwr.engine.batchNotBegun", message:"No batch in progress" });    return;  }  dwr.engine._batch = null;  if (batch.map.callCount == 0) return;  // The hooks need to be merged carefully to preserve ordering  if (options) dwr.engine._mergeBatch(batch, options);  // In ordered mode, we don't send unless the list of sent items is empty  if (dwr.engine._ordered && dwr.engine._batchesLength != 0) {    dwr.engine._batchQueue[dwr.engine._batchQueue.length] = batch;  }  else {    dwr.engine._sendData(batch);  }};/** @deprecated */dwr.engine.setPollMethod = function(type) { dwr.engine.setPollType(type); };dwr.engine.setMethod = function(type) { dwr.engine.setRpcType(type); };dwr.engine.setVerb = function(verb) { dwr.engine.setHttpMethod(verb); };//==============================================================================// Only private stuff below here//==============================================================================/** The original page id sent from the server */dwr.engine._origScriptSessionId = "47857D9F260C82871FC4D06192ACECEC";/** The session cookie name */dwr.engine._sessionCookieName = "JSESSIONID"; // JSESSIONID/** Is GET enabled for the benefit of Safari? */dwr.engine._allowGetForSafariButMakeForgeryEasier = "false";/** The script prefix to strip in the case of scriptTagProtection. */dwr.engine._scriptTagProtection = "throw 'allowScriptTagRemoting is false.';";/** The default path to the DWR servlet */dwr.engine._defaultPath = "/ajax_8/dwr";/** The read page id that we calculate */dwr.engine._scriptSessionId = null;/** The function that we use to fetch/calculate a session id */dwr.engine._getScriptSessionId = function() {  if (dwr.engine._scriptSessionId == null) {    dwr.engine._scriptSessionId = dwr.engine._origScriptSessionId + Math.floor(Math.random() * 1000);  }  return dwr.engine._scriptSessionId;};/** A function to call if something fails. */dwr.engine._errorHandler = dwr.engine.defaultErrorHandler;/** For debugging when something unexplained happens. */dwr.engine._warningHandler = dwr.engine.defaultWarningHandler;/** A function to be called before requests are marshalled. Can be null. */dwr.engine._preHook = null;/** A function to be called after replies are received. Can be null. */dwr.engine._postHook = null;/** An map of the batches that we have sent and are awaiting a reply on. */dwr.engine._batches = {};/** A count of the number of outstanding batches. Should be == to _batches.length unless prototype has messed things up */dwr.engine._batchesLength = 0;/** In ordered mode, the array of batches waiting to be sent */dwr.engine._batchQueue = [];/** What is the default rpc type */dwr.engine._rpcType = dwr.engine.XMLHttpRequest;/** What is the default remoting method (ie GET or POST) */dwr.engine._httpMethod = "POST";/** Do we attempt to ensure that calls happen in the order in which they were sent? */dwr.engine._ordered = false;/** Do we make the calls async? */dwr.engine._async = true;/** The current batch (if we are in batch mode) */dwr.engine._batch = null;/** The global timeout */dwr.engine._timeout = 0;/** ActiveX objects to use when we want to convert an xml string into a DOM object. */dwr.engine._DOMDocument = ["Msxml2.DOMDocument.6.0", "Msxml2.DOMDocument.5.0", "Msxml2.DOMDocument.4.0", "Msxml2.DOMDocument.3.0", "MSXML2.DOMDocument", "MSXML.DOMDocument", "Microsoft.XMLDOM"];/** The ActiveX objects to use when we want to do an XMLHttpRequest call. */dwr.engine._XMLHTTP = ["Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"];/** Are we doing comet or polling? */dwr.engine._activeReverseAjax = false;/** What is the default polling type */dwr.engine._pollType = dwr.engine.XMLHttpRequest;//dwr.engine._pollType = dwr.engine.IFrame;/** The iframe that we are using to poll */dwr.engine._outstandingIFrames = [];/** The xhr object that we are using to poll */dwr.engine._pollReq = null;/** How many milliseconds between internal comet polls */dwr.engine._pollCometInterval = 200;/** How many times have we re-tried to poll? */dwr.engine._pollRetries = 0;dwr.engine._maxPollRetries = 0;/** Do we do a document.reload if we get a text/html reply? */dwr.engine._textHtmlHandler = null;/** If you wish to send custom headers with every request */dwr.engine._headers = null;/** If you wish to send extra custom request parameters with each request */dwr.engine._parameters = null;/** Undocumented interceptors - do not use */dwr.engine._postSeperator = "\n";dwr.engine._defaultInterceptor = function(data) {return data;}dwr.engine._urlRewriteHandler = dwr.engine._defaultInterceptor;dwr.engine._contentRewriteHandler = dwr.engine._defaultInterceptor;dwr.engine._replyRewriteHandler = dwr.engine._defaultInterceptor;/** Batch ids allow us to know which batch the server is answering */dwr.engine._nextBatchId = 0;/** A list of the properties that need merging from calls to a batch */dwr.engine._propnames = [ "rpcType", "httpMethod", "async", "timeout", "errorHandler", "warningHandler", "textHtmlHandler" ];/** Do we stream, or can be hacked to do so? */dwr.engine._partialResponseNo = 0;dwr.engine._partialResponseYes = 1;dwr.engine._partialResponseFlush = 2;/** * @private Send a request. Called by the Javascript interface stub * @param path part of URL after the host and before the exec bit without leading or trailing /s * @param scriptName The class to execute * @param methodName The method on said class to execute * @param func The callback function to which any returned data should be passed *       if this is null, any returned data will be ignored * @param vararg_params The parameters to pass to the above class */dwr.engine._execute = function(path, scriptName, methodName, vararg_params) {  var singleShot = false;  if (dwr.engine._batch == null) {    dwr.engine.beginBatch();    singleShot = true;  }  var batch = dwr.engine._batch;  // To make them easy to manipulate we copy the arguments into an args array  var args = [];  for (var i = 0; i < arguments.length - 3; i++) {    args[i] = arguments[i + 3];  }  // All the paths MUST be to the same servlet  if (batch.path == null) {    batch.path = path;  }  else {    if (batch.path != path) {      dwr.engine._handleError(batch, { name:"dwr.engine.multipleServlets", message:"Can't batch requests to multiple DWR Servlets." });      return;    }  }  // From the other params, work out which is the function (or object with  // call meta-data) and which is the call parameters  var callData;  var lastArg = args[args.length - 1];  if (typeof lastArg == "function" || lastArg == null) callData = { callback:args.pop() };  else callData = args.pop();  // Merge from the callData into the batch  dwr.engine._mergeBatch(batch, callData);  batch.handlers[batch.map.callCount] = {    exceptionHandler:callData.exceptionHandler,    callback:callData.callback  };  // Copy to the map the things that need serializing  var prefix = "c" + batch.map.callCount + "-";  batch.map[prefix + "scriptName"] = scriptName;  batch.map[prefix + "methodName"] = methodName;  batch.map[prefix + "id"] = batch.map.callCount;  for (i = 0; i < args.length; i++) {    dwr.engine._serializeAll(batch, [], args[i], prefix + "param" + i);  }  // Now we have finished remembering the call, we incr the call count  batch.map.callCount++;  if (singleShot) dwr.engine.endBatch();};

⌨️ 快捷键说明

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