DWREngine._stateChange = function(batch) {
//状态正确则进入下面的if块
if (!batch.completed && batch.req.readyState == 4) {
try {
//取回返回的文本
var reply = batch.req.responseText;
//请求的状态
var status = batch.req.status;
//执行返回的文本,返回的文本实际上是一段脚本
eval(reply);
//完成之后坐清理
DWREngine._clearUp(batch);
}
response.setStatus(1000); 1000
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) {
if ( status == 1000) {
alert("未登录或登录超时,请重新登录");
return;
}
dwr.engine._handleError
joe_walker | 1.1 | 1 | // engine.js |
joe_walker | 1.10 | 2 | |
joe_walker | 1.14 | 3 | /** |
| 4 | * Declare a constructor function to which we can add real functions. | ||
joe_walker | 1.21 | 5 | * @constructor |
joe_walker | 1.14 | 6 | */ |
| 7 | function DWREngine() | ||
| 8 | { | ||
| 9 | } | ||
joe_walker | 1.10 | 10 | |
joe_walker | 1.14 | 11 | /** |
| 12 | * The constants to pick the remoting method | ||
| 13 | */ | ||
| 14 | DWREngine.XMLHttpRequest = 1; | ||
| 15 | DWREngine.IFrame = 2; | ||
| 16 | |||
| 17 | /** | ||
| 18 | * A function to be called before requests are marshalled. Can be null. | ||
joe_walker | 1.20 | 19 | * @private |
joe_walker | 1.14 | 20 | */ |
joe_walker | 1.20 | 21 | DWREngine._preHook = null; |
joe_walker | 1.14 | 22 | |
| 23 | /** | ||
| 24 | * A function to be called after replies are received. Can be null. | ||
joe_walker | 1.20 | 25 | * @private |
joe_walker | 1.14 | 26 | */ |
joe_walker | 1.20 | 27 | DWREngine._postHook = null; |
joe_walker | 1.14 | 28 | |
| 29 | /** | ||
| 30 | * A map of all the known current calls | ||
joe_walker | 1.20 | 31 | * @private |
joe_walker | 1.14 | 32 | */ |
joe_walker | 1.20 | 33 | DWREngine._calls = new Object(); |
joe_walker | 1.14 | 34 | |
| 35 | /** | ||
| 36 | * What is the default remoting method | ||
joe_walker | 1.20 | 37 | * @private |
joe_walker | 1.14 | 38 | */ |
joe_walker | 1.20 | 39 | DWREngine._method = DWREngine.XMLHttpRequest; |
joe_walker | 1.14 | 40 | |
| 41 | /** | ||
| 42 | * When we are dreaming up variable names, this is a number that we use | ||
| 43 | * as a basis to ensure uniqueness. | ||
| 44 | * WARNING: if it is possible for execute to be called again before | ||
| 45 | * marshalling has finished on the first then this will break, but I | ||
| 46 | * think that is not possible. | ||
joe_walker | 1.20 | 47 | * @private |
joe_walker | 1.14 | 48 | */ |
joe_walker | 1.20 | 49 | DWREngine._paramCount = 0; |
joe_walker | 1.14 | 50 | |
| 51 | /** | ||
| 52 | * The error handler function | ||
joe_walker | 1.20 | 53 | * @param handler A function to call with single an error parameter on failure |
joe_walker | 1.14 | 54 | */ |
| 55 | DWREngine.setErrorHandler = function(handler) | ||
| 56 | { | ||
joe_walker | 1.20 | 57 | DWREngine._errorHandler = handler; |
joe_walker | 1.14 | 58 | } |
joe_walker | 1.10 | 59 | |
joe_walker | 1.14 | 60 | /** |
joe_walker | 1.20 | 61 | * The Pre-Hook is called before any DWR remoting is done. |
| 62 | * Pre hooks can be useful for displaying "please wait" messages. | ||
| 63 | * @param handler A function to call with no params before remoting | ||
| 64 | * @see DWREngine.setPostHook | ||
joe_walker | 1.14 | 65 | */ |
| 66 | DWREngine.setPreHook = function(handler) | ||
joe_walker | 1.1 | 67 | { |
joe_walker | 1.20 | 68 | DWREngine._preHook = handler; |
joe_walker | 1.1 | 69 | } |
| 70 | |||
joe_walker | 1.14 | 71 | /** |
joe_walker | 1.20 | 72 | * The Post-Hook is called after any DWR remoting is done. |
| 73 | * Pre hooks can be useful for removing "please wait" messages. | ||
| 74 | * @param handler A function to call with no params after remoting | ||
| 75 | * @see DWREngine.setPreHook | ||
joe_walker | 1.14 | 76 | */ |
| 77 | DWREngine.setPostHook = function(handler) | ||
joe_walker | 1.1 | 78 | { |
joe_walker | 1.20 | 79 | DWREngine._postHook = handler; |
joe_walker | 1.1 | 80 | } |
| 81 | |||
joe_walker | 1.14 | 82 | /** |
| 83 | * Set the preferred remoting method. | ||
| 84 | * setMethod does not guarantee that the selected method will be used, just that | ||
| 85 | * we will try that method first. | ||
joe_walker | 1.20 | 86 | * @param newmethod One of DWREngine.XMLHttpRequest or DWREngine.IFrame |
joe_walker | 1.14 | 87 | */ |
| 88 | DWREngine.setMethod = function(newmethod) | ||
joe_walker | 1.1 | 89 | { |
joe_walker | 1.14 | 90 | if (newmethod != DWREngine.XMLHttpRequest && newmethod != DWREngine.IFrame) |
| 91 | { | ||
| 92 | alert("Remoting method must be one of DWREngine.XMLHttpRequest or DWREngine.IFrame"); | ||
| 93 | throw newmethod; | ||
| 94 | } | ||
| 95 | |||
joe_walker | 1.20 | 96 | DWREngine._method = newmethod; |
joe_walker | 1.1 | 97 | } |
| 98 | |||
joe_walker | 1.14 | 99 | /** |
joe_walker | 1.18 | 100 | * A function to call if something fails. |
joe_walker | 1.20 | 101 | * @private |
joe_walker | 1.18 | 102 | */ |
joe_walker | 1.20 | 103 | DWREngine._errorHandler = function(data) |
joe_walker | 1.18 | 104 | { |
joe_walker | 1.19 | 105 | if (typeof data == "object" && data.name == "Error" && data.description) |
joe_walker | 1.18 | 106 | { |
| 107 | alert("Error: " + data.description); | ||
| 108 | } | ||
| 109 | else | ||
| 110 | { | ||
| 111 | alert(data); | ||
| 112 | } | ||
| 113 | } | ||
| 114 | |||
| 115 | /** | ||
joe_walker | 1.20 | 116 | * Called when the replies are received. |
| 117 | * This method is called by Javascript that is emitted by server | ||
| 118 | * @private | ||
joe_walker | 1.14 | 119 | */ |
joe_walker | 1.23 | 120 | DWREngine._handleResponse = function(id, reply) |
joe_walker | 1.1 | 121 | { |
joe_walker | 1.20 | 122 | var call = DWREngine._calls[id]; |
joe_walker | 1.5 | 123 | if (call == null) |
joe_walker | 1.1 | 124 | { |
joe_walker | 1.5 | 125 | var known = ""; |
joe_walker | 1.20 | 126 | for (call in DWREngine._calls) |
joe_walker | 1.5 | 127 | { |
| 128 | known += call + "/n"; | ||
| 129 | } | ||
| 130 | alert("Internal Error: Call with id='"+id+"' unknown./nI do know about the following:/n"+known); | ||
| 131 | return; | ||
joe_walker | 1.1 | 132 | } |
joe_walker | 1.22 | 133 | |
| 134 | DWREngine._calls[id] = null; | ||
joe_walker | 1.1 | 135 | |
joe_walker | 1.5 | 136 | if (call.iframe != null) |
| 137 | { | ||
| 138 | call.iframe.parentNode.removeChild(call.iframe); | ||
| 139 | } | ||
| 140 | |||
joe_walker | 1.20 | 141 | if (DWREngine._postHook != null) |
joe_walker | 1.13 | 142 | { |
joe_walker | 1.20 | 143 | DWREngine._postHook(); |
joe_walker | 1.13 | 144 | } |
| 145 | |||
joe_walker | 1.5 | 146 | if (call.callback == null) |
| 147 | { | ||
| 148 | if (reply != null) | ||
| 149 | { | ||
| 150 | alert("Missing callback for reply "+reply); | ||
| 151 | } | ||
| 152 | } | ||
| 153 | else | ||
| 154 | { | ||
joe_walker | 1.16 | 155 | // Error handlers inside here indicate an error that is nothing to do |
| 156 | // with DWR so we handle them differently. | ||
| 157 | try | ||
| 158 | { | ||
| 159 | call.callback(reply); | ||
| 160 | } | ||
| 161 | catch (ex) | ||
| 162 | { | ||
joe_walker | 1.20 | 163 | DWREngine._errorHandler(ex); |
joe_walker | 1.16 | 164 | } |
joe_walker | 1.5 | 165 | } |
joe_walker | 1.1 | 166 | } |
| 167 | |||
joe_walker | 1.14 | 168 | /** |
joe_walker | 1.20 | 169 | * Called when errors are received. |
| 170 | * This method is called by Javascript that is emitted by server | ||
| 171 | * @private | ||
joe_walker | 1.14 | 172 | */ |
joe_walker | 1.23 | 173 | DWREngine._handleError = function(id, reason) |
joe_walker | 1.1 | 174 | { |
joe_walker | 1.20 | 175 | var call = DWREngine._calls[id]; |
joe_walker | 1.16 | 176 | if (call != null) |
joe_walker | 1.3 | 177 | { |
joe_walker | 1.22 | 178 | DWREngine._calls[id] = null; |
joe_walker | 1.16 | 179 | |
| 180 | if (call.iframe != null) | ||
| 181 | { | ||
| 182 | call.iframe.parentNode.removeChild(call.iframe); | ||
| 183 | } | ||
joe_walker | 1.5 | 184 | } |
joe_walker | 1.16 | 185 | else |
joe_walker | 1.5 | 186 | { |
joe_walker | 1.16 | 187 | // Things are going wrong so alerting probably does not make sense |
| 188 | // alert("Internal Error: Call with id="+id+" unknown."); | ||
joe_walker | 1.3 | 189 | } |
joe_walker | 1.1 | 190 | |
joe_walker | 1.20 | 191 | if (DWREngine._postHook != null) |
joe_walker | 1.1 | 192 | { |
joe_walker | 1.20 | 193 | DWREngine._postHook(); |
joe_walker | 1.1 | 194 | } |
| 195 | |||
joe_walker | 1.20 | 196 | DWREngine._errorHandler(reason); |
joe_walker | 1.5 | 197 | } |
| 198 | |||
joe_walker | 1.14 | 199 | /** |
| 200 | * Send a request to the server | ||
joe_walker | 1.20 | 201 | * This method is called by Javascript that is emitted by server |
| 202 | * @private | ||
joe_walker | 1.22 | 203 | * @param func The callback function to which any returned data should be passed |
| 204 | * if this is null, any returned data will be ignored | ||
joe_walker | 1.23 | 205 | * @param path The part of the URL after the host and before the exec bit |
| 206 | * without leading or trailing /s | ||
joe_walker | 1.22 | 207 | * @param classname The class to execute |
| 208 | * @param methodname The method on said class to execute | ||
| 209 | * @param vararg_params The parameters to pass to the above class | ||
joe_walker | 1.14 | 210 | */ |
joe_walker | 1.23 | 211 | DWREngine._execute = function(func, path, classname, methodname, vararg_params) |
joe_walker | 1.5 | 212 | { |
joe_walker | 1.16 | 213 | if (func != null && typeof func != "function" && typeof func != "object") |
| 214 | { | ||
| 215 | alert("Supplied callback function is neither null nor a function: "+func); | ||
| 216 | throw func; | ||
| 217 | } | ||
| 218 | |||
joe_walker | 1.14 | 219 | var call = new Object(); |
| 220 | call.callback = func | ||
| 221 | |||
| 222 | // Get a unique ID for this call | ||
joe_walker | 1.5 | 223 | var random = Math.floor(Math.random() * 10001); |
joe_walker | 1.14 | 224 | call.id = (random + "_" + new Date().getTime()).toString(); |
joe_walker | 1.1 | 225 | |
joe_walker | 1.20 | 226 | DWREngine._calls[call.id] = call; |
joe_walker | 1.5 | 227 | |
joe_walker | 1.20 | 228 | if (DWREngine._preHook != null) |
joe_walker | 1.1 | 229 | { |
joe_walker | 1.20 | 230 | DWREngine._preHook(); |
joe_walker | 1.1 | 231 | } |
| 232 | |||
joe_walker | 1.5 | 233 | call.callback = func; |
joe_walker | 1.1 | 234 | |
joe_walker | 1.10 | 235 | // Build a map containing all the values to pass to the server. |
joe_walker | 1.20 | 236 | DWREngine._paramCount = 0; |
joe_walker | 1.1 | 237 | |
joe_walker | 1.10 | 238 | call.map = new Object(); |
| 239 | call.map.classname = classname; | ||
| 240 | call.map.methodname = methodname; | ||
| 241 | call.map.id = call.id; | ||
joe_walker | 1.22 | 242 | |
| 243 | // Serialize the parameters into call.map | ||
| 244 | DWREngine._addSerializeFunctions(); | ||
| 245 | var context = new Array(); | ||
joe_walker | 1.23 | 246 | for (var i = 4; i < arguments.length; i++) |
joe_walker | 1.10 | 247 | { |
joe_walker | 1.23 | 248 | DWREngine._serializeAll(call.map, context, arguments[i], "param" + (i - 4)); |
joe_walker | 1.10 | 249 | } |
joe_walker | 1.22 | 250 | DWREngine._removeSerializeFunctions(); |
joe_walker | 1.10 | 251 | |
| 252 | // Get setup for XMLHttpRequest if possible | ||
joe_walker | 1.20 | 253 | if (DWREngine._method == DWREngine.XMLHttpRequest) |
joe_walker | 1.1 | 254 | { |
joe_walker | 1.14 | 255 | if (window.XMLHttpRequest) |
| 256 | { | ||
| 257 | call.req = new XMLHttpRequest(); | ||
| 258 | } | ||
joe_walker | 1.22 | 259 | // IE5 for the mac claims to support window.ActiveXObject, but throws an error when it's used |
| 260 | else if (window.ActiveXObject && !(navigator.userAgent.indexOf ('Mac') >= 0 && navigator.userAgent.indexOf ("MSIE") >= 0)) | ||
joe_walker | 1.9 | 261 | { |
joe_walker | 1.14 | 262 | call.req = new ActiveXObject("Microsoft.XMLHTTP"); |
joe_walker | 1.9 | 263 | } |
joe_walker | 1.10 | 264 | } |
joe_walker | 1.9 | 265 | |
joe_walker | 1.22 | 266 | var query = ""; |
| 267 | var prop; | ||
joe_walker | 1.10 | 268 | if (call.req) |
| 269 | { | ||
joe_walker | 1.16 | 270 | call.map.xml = true; |
| 271 | |||
joe_walker | 1.10 | 272 | // Proceed using XMLHttpRequest |
joe_walker | 1.22 | 273 | for (prop in call.map) |
joe_walker | 1.9 | 274 | { |
joe_walker | 1.10 | 275 | query += prop + "=" + call.map[prop] + "/n"; |
joe_walker | 1.9 | 276 | } |
| 277 | |||
joe_walker | 1.23 | 278 | call.url = path + "/exec"; |
joe_walker | 1.9 | 279 | |
joe_walker | 1.20 | 280 | call.req.onreadystatechange = function() { DWREngine._stateChange(call); }; |
joe_walker | 1.10 | 281 | call.req.open("POST", call.url, true); |
joe_walker | 1.9 | 282 | call.req.send(query); |
joe_walker | 1.1 | 283 | } |
| 284 | else | ||
| 285 | { | ||
joe_walker | 1.16 | 286 | call.map.xml = false; |
| 287 | |||
joe_walker | 1.10 | 288 | // Proceed using iframe |
joe_walker | 1.22 | 289 | for (prop in call.map) |
joe_walker | 1.9 | 290 | { |
joe_walker | 1.10 | 291 | var lookup = call.map[prop]; |
| 292 | query += lookup.name + "=" + lookup.convert + "&"; | ||
joe_walker | 1.9 | 293 | } |
joe_walker | 1.10 | 294 | query = query.substring(0, query.length - 1); |
joe_walker | 1.9 | 295 | |
joe_walker | 1.23 | 296 | call.url = path + "/exec?" + query; |
joe_walker | 1.9 | 297 | |
joe_walker | 1.5 | 298 | call.iframe = document.createElement('iframe'); |
| 299 | call.iframe.setAttribute('id', 'dwr-iframe'); | ||
| 300 | call.iframe.setAttribute('style', 'width:0px; height:0px; border:0px;'); | ||
| 301 | call.iframe.setAttribute('src', call.url); | ||
| 302 | document.body.appendChild(call.iframe); | ||
joe_walker | 1.1 | 303 | } |
| 304 | } | ||
| 305 | |||
joe_walker | 1.14 | 306 | /** |
joe_walker | 1.22 | 307 | * |
| 308 | */ | ||
| 309 | DWREngine._addSerializeFunctions = function() | ||
| 310 | { | ||
| 311 | Object.prototype.dwrSerialize = DWREngine._serializeObject; | ||
| 312 | Array.prototype.dwrSerialize = DWREngine._serializeArray; | ||
| 313 | Boolean.prototype.dwrSerialize = DWREngine._serializeBoolean; | ||
| 314 | Number.prototype.dwrSerialize = DWREngine._serializeNumber; | ||
| 315 | String.prototype.dwrSerialize = DWREngine._serializeString; | ||
| 316 | Date.prototype.dwrSerialize = DWREngine._serializeDate; | ||
| 317 | } | ||
| 318 | |||
| 319 | /** | ||
| 320 | * | ||
| 321 | */ | ||
| 322 | DWREngine._removeSerializeFunctions = function() | ||
| 323 | { | ||
| 324 | delete Object.prototype.dwrSerialize; | ||
| 325 | delete Array.prototype.dwrSerialize; | ||
| 326 | delete Boolean.prototype.dwrSerialize; | ||
| 327 | delete Number.prototype.dwrSerialize; | ||
| 328 | delete String.prototype.dwrSerialize; | ||
| 329 | delete Date.prototype.dwrSerialize; | ||
| 330 | } | ||
| 331 | |||
| 332 | /** | ||
joe_walker | 1.14 | 333 | * Marshall a data item |
joe_walker | 1.20 | 334 | * @private |
joe_walker | 1.22 | 335 | * @param output A map of variables to how they have been marshalled |
| 336 | * @param referto An array of already marshalled variables to prevent recurrsion | ||
| 337 | * @param data The data to be marshalled | ||
| 338 | * @param name The name of the data being marshalled | ||
| 339 | */ | ||
| 340 | DWREngine._serializeAll = function(output, referto, data, name) | ||
| 341 | { | ||
| 342 | DWREngine._serializeAll(output, referto, data, name) | ||
| 343 | } | ||
| 344 | |||
| 345 | /** | ||
| 346 | * Marshall a data item of unknown type | ||
| 347 | * @private | ||
| 348 | * @see DWREngine._serializeAll() | ||
joe_walker | 1.14 | 349 | */ |
joe_walker | 1.22 | 350 | DWREngine._serializeAll = function(output, referto, data, name) |
joe_walker | 1.6 | 351 | { |
| 352 | if (data == null) | ||
| 353 | { | ||
joe_walker | 1.10 | 354 | output[name] = "null:null"; |
| 355 | return; | ||
joe_walker | 1.6 | 356 | } |
| 357 | |||
| 358 | switch (typeof data) | ||
| 359 | { | ||
| 360 | case "boolean": | ||
joe_walker | 1.10 | 361 | output[name] = "boolean:" + data; |
| 362 | break; | ||
joe_walker | 1.6 | 363 | |
| 364 | case "number": | ||
joe_walker | 1.10 | 365 | output[name] = "number:" + data; |
| 366 | break; | ||
joe_walker | 1.6 | 367 | |
| 368 | case "string": | ||
joe_walker | 1.12 | 369 | output[name] = "string:" + encodeURIComponent(data); |
joe_walker | 1.10 | 370 | break; |
joe_walker | 1.6 | 371 | |
| 372 | case "object": | ||
joe_walker | 1.22 | 373 | if (data.dwrSerialize) |
joe_walker | 1.6 | 374 | { |
joe_walker | 1.22 | 375 | output[name] = data.dwrSerialize(output, referto, data, name); |
joe_walker | 1.6 | 376 | } |
joe_walker | 1.22 | 377 | else |
joe_walker | 1.6 | 378 | { |
joe_walker | 1.22 | 379 | alert("Object without dwrSerialize: " + typeof data + ", attempting default converter."); |
| 380 | output[name] = "default:" + data; | ||
joe_walker | 1.6 | 381 | } |
joe_walker | 1.22 | 382 | break; |
| 383 | |||
| 384 | case "function": | ||
| 385 | // We just ignore functions. | ||
| 386 | break; | ||
| 387 | |||
| 388 | default: | ||
| 389 | alert("Unexpected type: " + typeof data + ", attempting default converter."); | ||
| 390 | output[name] = "default:" + data; | ||
| 391 | break; | ||
| 392 | } | ||
| 393 | } | ||
| 394 | |||
| 395 | /** | ||
| 396 | * This is for the types that can recurse so we need to check that we've not | ||
| 397 | * marshalled this object before. | ||
| 398 | * We'd like to do: | ||
| 399 | * var lookup = referto[data]; | ||
| 400 | * However hashmaps in Javascript appear to use the hash values of the *string* | ||
| 401 | * versions of the objects used as keys so all objects count as the same thing. | ||
| 402 | * So we need to have referto as an array and go through it sequentially | ||
| 403 | * checking for equality with data | ||
| 404 | * @para | ||
| 405 | */ | ||
| 406 | DWREngine._lookup = function(referto, data, name) | ||
| 407 | { | ||
| 408 | var lookup; | ||
| 409 | for (var i = 0; i < referto.length; i++) | ||
| 410 | { | ||
| 411 | if (referto[i].data === data) | ||
joe_walker | 1.6 | 412 | { |
joe_walker | 1.22 | 413 | lookup = referto[i]; |
| 414 | break; | ||
joe_walker | 1.6 | 415 | } |
joe_walker | 1.22 | 416 | } |
| 417 | |||
| 418 | if (lookup != null) | ||
| 419 | { | ||
| 420 | return "reference:" + lookup.name; | ||
| 421 | } | ||
| 422 | |||
| 423 | referto.push({ data:data, name:name }); | ||
| 424 | return null; | ||
| 425 | } | ||
| 426 | |||
| 427 | /** | ||
| 428 | * Marshall an object | ||
| 429 | * @private | ||
| 430 | * @see DWREngine._serializeAll() | ||
| 431 | */ | ||
| 432 | DWREngine._serializeObject = function(output, referto, data, name) | ||
| 433 | { | ||
| 434 | var ref = DWREngine._lookup(referto, this, name); | ||
| 435 | if (ref != null) | ||
| 436 | { | ||
| 437 | return ref; | ||
| 438 | } | ||
| 439 | |||
| 440 | // treat objects as an associative arrays | ||
| 441 | var reply = "Object:{" | ||
| 442 | var element; | ||
| 443 | for (element in this) | ||
| 444 | { | ||
| 445 | if (element != "dwrSerialize") | ||
joe_walker | 1.6 | 446 | { |
joe_walker | 1.22 | 447 | DWREngine._paramCount++; |
| 448 | var childName = "c" + DWREngine._paramCount; | ||
| 449 | DWREngine._serializeAll(output, referto, this[element], childName); | ||
| 450 | |||
| 451 | reply += element; | ||
| 452 | reply += ":reference:"; | ||
| 453 | reply += childName; | ||
| 454 | reply += ", "; | ||
joe_walker | 1.6 | 455 | } |
joe_walker | 1.22 | 456 | } |
| 457 | reply = reply.substring(0, reply.length - 2); | ||
| 458 | reply += "}"; | ||
| 459 | |||
| 460 | return reply; | ||
| 461 | } | ||
| 462 | |||
| 463 | /** | ||
| 464 | * Marshall an array | ||
| 465 | * @private | ||
| 466 | * @see DWREngine._serializeAll() | ||
| 467 | */ | ||
| 468 | DWREngine._serializeArray = function(output, referto, data, name) | ||
| 469 | { | ||
| 470 | var ref = DWREngine._lookup(referto, this, name); | ||
| 471 | if (ref != null) | ||
| 472 | { | ||
| 473 | return ref; | ||
| 474 | } | ||
| 475 | |||
| 476 | var reply = "Array:[" | ||
| 477 | for (var i = 0; i < this.length; i++) | ||
| 478 | { | ||
| 479 | if (i != 0) | ||
joe_walker | 1.6 | 480 | { |
joe_walker | 1.22 | 481 | reply += ","; |
| 482 | } | ||
joe_walker | 1.12 | 483 | |
joe_walker | 1.22 | 484 | DWREngine._paramCount++; |
| 485 | var childName = "c" + DWREngine._paramCount; | ||
| 486 | DWREngine._serializeAll(output, referto, this[i], childName); | ||
| 487 | reply += "reference:"; | ||
| 488 | reply += childName; | ||
| 489 | } | ||
| 490 | reply += "]"; | ||
joe_walker | 1.10 | 491 | |
joe_walker | 1.22 | 492 | return reply; |
| 493 | } | ||
joe_walker | 1.10 | 494 | |
joe_walker | 1.22 | 495 | /** |
| 496 | * Marshall a Boolean | ||
| 497 | * @private | ||
| 498 | * @see DWREngine._serializeAll() | ||
| 499 | */ | ||
| 500 | DWREngine._serializeBoolean = function(output, referto, data, name) | ||
| 501 | { | ||
| 502 | return "Boolean:" + this; | ||
| 503 | } | ||
joe_walker | 1.6 | 504 | |
joe_walker | 1.22 | 505 | /** |
| 506 | * Marshall a Number | ||
| 507 | * @private | ||
| 508 | * @see DWREngine._serializeAll() | ||
| 509 | */ | ||
| 510 | DWREngine._serializeNumber = function(output, referto, data, name) | ||
| 511 | { | ||
| 512 | return "Number:" + this; | ||
| 513 | } | ||
joe_walker | 1.8 | 514 | |
joe_walker | 1.22 | 515 | /** |
| 516 | * Marshall a String | ||
| 517 | * @private | ||
| 518 | * @see DWREngine._serializeAll() | ||
| 519 | */ | ||
| 520 | DWREngine._serializeString = function(output, referto, data, name) | ||
| 521 | { | ||
| 522 | return "String:" + encodeURIComponent(this); | ||
| 523 | } | ||
joe_walker | 1.6 | 524 | |
joe_walker | 1.22 | 525 | /** |
| 526 | * Marshall a Date | ||
| 527 | * @private | ||
| 528 | * @see DWREngine._serializeAll() | ||
| 529 | */ | ||
| 530 | DWREngine._serializeDate = function(output, referto, data, name) | ||
| 531 | { | ||
| 532 | return "Date:[ " + | ||
| 533 | this.getUTCFullYear() + ", " + | ||
| 534 | this.getUTCMonth() + ", " + | ||
| 535 | this.getUTCDate() + ", " + | ||
| 536 | this.getUTCHours() + ", " + | ||
| 537 | this.getUTCMinutes() + ", " + | ||
| 538 | this.getUTCSeconds() + ", " + | ||
| 539 | this.getUTCMilliseconds() + "]"; | ||
joe_walker | 1.6 | 540 | } |
| 541 | |||
joe_walker | 1.14 | 542 | /** |
| 543 | * Called by XMLHttpRequest to indicate that something has happened | ||
joe_walker | 1.20 | 544 | * @private |
joe_walker | 1.14 | 545 | */ |
joe_walker | 1.20 | 546 | DWREngine._stateChange = function(call) |
joe_walker | 1.1 | 547 | { |
joe_walker | 1.5 | 548 | if (call.req.readyState == 4) |
joe_walker | 1.1 | 549 | { |
joe_walker | 1.22 | 550 | try |
joe_walker | 1.6 | 551 | { |
joe_walker | 1.22 | 552 | if (call.req.status && call.req.status == 200) |
joe_walker | 1.10 | 553 | { |
joe_walker | 1.22 | 554 | eval(call.req.responseText); |
joe_walker | 1.10 | 555 | } |
joe_walker | 1.22 | 556 | else |
joe_walker | 1.10 | 557 | { |
joe_walker | 1.23 | 558 | DWREngine._handleError(call.id, call.req.responseText); |
joe_walker | 1.10 | 559 | } |
joe_walker | 1.6 | 560 | } |
joe_walker | 1.22 | 561 | catch (ex) |
joe_walker | 1.6 | 562 | { |
joe_walker | 1.23 | 563 | DWREngine._handleError(call.id, ex); |
joe_walker | 1.6 | 564 | } |
joe_walker | 1.1 | 565 | } |
joe_walker | 1.14 | 566 | } |
| 567 | |||
| 568 | /** | ||
joe_walker | 1.20 | 569 | * @deprecated |
joe_walker | 1.14 | 570 | * The error handler function |
| 571 | */ | ||
| 572 | function dwrSetErrorHandler(handler) | ||
| 573 | { | ||
| 574 | dwrDeprecated(); | ||
| 575 | DWREngine.setErrorHandler(handler); | ||
| 576 | } | ||
| 577 | |||
| 578 | /** | ||
joe_walker | 1.20 | 579 | * @deprecated |
joe_walker | 1.14 | 580 | * A pre execute hook |
| 581 | */ | ||
| 582 | function dwrSetPreHook(handler) | ||
| 583 | { | ||
| 584 | dwrDeprecated(); | ||
| 585 | DWREngine.setPreHook(handler); | ||
| 586 | } | ||
| 587 | |||
| 588 | /** | ||
joe_walker | 1.20 | 589 | * @deprecated |
joe_walker | 1.14 | 590 | * A post execute hook |
| 591 | */ | ||
| 592 | function dwrSetPostHook(handler) | ||
| 593 | { | ||
| 594 | dwrDeprecated(); | ||
| 595 | DWREngine.setPostHook(handler); | ||
| 596 | } | ||
| 597 | |||
| 598 | /** | ||
| 599 | * Inform the users that the function they just called is deprecated. | ||
joe_walker | 1.20 | 600 | * @private |
joe_walker | 1.14 | 601 | */ |
| 602 | function dwrDeprecated() | ||
| 603 | { | ||
| 604 | alert("dwrXxx() functions are deprecated. Please convert to DWREngine.xxx()"); | ||
joe_walker | 1.1 | 605 | } |

185

被折叠的 条评论
为什么被折叠?



