?? engine.js
字號:
/* * 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};/** * 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."); // 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); };dwr.engine.setPollType = function() { dwr.engine._debug("Manually setting the Poll Type is not supported"); };//==============================================================================// Only private stuff below here//==============================================================================/** The original page id sent from the server */dwr.engine._origScriptSessionId = "${scriptSessionId}";/** The session cookie name */dwr.engine._sessionCookieName = "${sessionCookieName}"; // JSESSIONID/** Is GET enabled for the benefit of Safari? */dwr.engine._allowGetForSafariButMakeForgeryEasier = "${allowGetForSafariButMakeForgeryEasier}";/** The script prefix to strip in the case of scriptTagProtection. */dwr.engine._scriptTagProtection = "${scriptTagProtection}";/** The default path to the DWR servlet */dwr.engine._defaultPath = "${defaultPath}";/** Do we use XHR for reverse ajax because we are not streaming? */dwr.engine._pollWithXhr = "${pollWithXhr}";/** 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;/** 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 */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -