ajaxhelper.js
上传用户:wenllgg125
上传日期:2020-04-09
资源大小:7277k
文件大小:12k
源码类别:

SCSI/ASPI

开发平台:

Others

  1. 
  2. //-----------------------------------------------compat----------------------------------------------
  3. if (!Array.prototype.push) {
  4.   Array.prototype.push = function() {
  5. var startLength = this.length;
  6. for (var i = 0; i < arguments.length; i++)
  7.       this[startLength + i] = arguments[i];
  8.   return this.length;
  9.   }
  10. }
  11. if (!Function.prototype.apply) {
  12.   // Based on code from http://www.youngpup.net/
  13.   Function.prototype.apply = function(object, parameters) {
  14.     var parameterStrings = new Array();
  15.     if (!object)     object = window;
  16.     if (!parameters) parameters = new Array();
  17.     
  18.     for (var i = 0; i < parameters.length; i++)
  19.       parameterStrings[i] = 'x[' + i + ']';
  20.     
  21.     object.__apply__ = this;
  22.     var result = eval('obj.__apply__(' + 
  23.       parameterStrings[i].join(', ') + ')');
  24.     object.__apply__ = null;
  25.     
  26.     return result;
  27.   }
  28. }
  29. //-----------------------------------------------prototype----------------------------------------------
  30. var Prototype = {
  31.   Version: '@@VERSION@@'
  32. }
  33. var Class = {
  34.   create: function() {
  35.     return function() { 
  36.       this.initialize.apply(this, arguments);
  37.     }
  38.   }
  39. }
  40. var Abstract = new Object();
  41. Object.prototype.extend = function(object) {
  42.   for (property in object) {
  43.     this[property] = object[property];
  44.   }
  45.   return this;
  46. }
  47. Function.prototype.bind = function(object) {
  48.   var method = this;
  49.   return function() {
  50.     method.apply(object, arguments);
  51.   }
  52. }
  53. Function.prototype.bindAsEventListener = function(object) {
  54.   var method = this;
  55.   return function(event) {
  56.     method.call(object, event || window.event);
  57.   }
  58. }
  59. Number.prototype.toColorPart = function() {
  60.   var digits = this.toString(16);
  61.   if (this < 16) return '0' + digits;
  62.   return digits;
  63. }
  64. var Try = {
  65.   these: function() {
  66.     var returnValue;
  67.     
  68.     for (var i = 0; i < arguments.length; i++) {
  69.       var lambda = arguments[i];
  70.       try {
  71.         returnValue = lambda();
  72.         break;
  73.       } catch (e) {}
  74.     }
  75.     
  76.     return returnValue;
  77.   }
  78. }
  79. /*--------------------------------------------------------------------------*/
  80. var PeriodicalExecuter = Class.create();
  81. PeriodicalExecuter.prototype = {
  82.   initialize: function(callback, frequency) {
  83.     this.callback = callback;
  84.     this.frequency = frequency;
  85.     this.currentlyExecuting = false;
  86.     
  87.     this.registerCallback();
  88.   },
  89.   
  90.   registerCallback: function() {
  91.     setTimeout(this.onTimerEvent.bind(this), this.frequency * 1000);
  92.   },
  93.   
  94.   onTimerEvent: function() {
  95.     if (!this.currentlyExecuting) {
  96.       try { 
  97.         this.currentlyExecuting = true;
  98.         this.callback(); 
  99.       } finally { 
  100.         this.currentlyExecuting = false;
  101.       }
  102.     }
  103.     
  104.     this.registerCallback();
  105.   }
  106. }
  107. /*--------------------------------------------------------------------------*/
  108. function $() {
  109.   var elements = new Array();
  110.   
  111.   for (var i = 0; i < arguments.length; i++) {
  112.     var element = arguments[i];
  113.     try
  114.     {
  115. if (typeof element == 'string')
  116. element = document.getElementById(element) || document.all(element) || document.forms(0).all(element);
  117.     }
  118.     catch(ex)
  119.     {
  120. element = null;
  121.     }
  122.     if (arguments.length == 1) 
  123.       return element;
  124.       
  125.     elements.push(element);
  126.   }
  127.   
  128.   return elements;
  129. }
  130. //---------------------------------------------------ajax-----------------------------------------------------
  131. var Ajax = {
  132.   getTransport: function() {
  133.     return Try.these(
  134.       function() {return new ActiveXObject('Msxml2.XMLHTTP')},
  135.       function() {return new ActiveXObject('Microsoft.XMLHTTP')},
  136.       function() {return new XMLHttpRequest()}
  137.     ) || false;
  138.   },
  139.   
  140.   emptyFunction: function() {}
  141. }
  142. Ajax.Base = function() {};
  143. Ajax.Base.prototype = {
  144.   setOptions: function(options) {
  145.     this.options = {
  146.       method:       'post',
  147.       asynchronous: true,
  148.       parameters:   ''
  149.     }.extend(options || {});
  150.   }
  151. }
  152. Ajax.Request = Class.create();
  153. Ajax.Request.Events = 
  154.   ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
  155. Ajax.Request.prototype = (new Ajax.Base()).extend({
  156.   initialize: function(url, options) {
  157.     this.transport = Ajax.getTransport();
  158.     this.setOptions(options);
  159.   
  160.     try {
  161.       if (this.options.method == 'get')
  162.         url += '?' + this.options.parameters + '&_=';
  163.     
  164.       this.transport.open(this.options.method, url, true);
  165.       
  166.       if (this.options.asynchronous) {
  167.         this.transport.onreadystatechange = this.onStateChange.bind(this);
  168.         setTimeout((function() {this.respondToReadyState(1)}).bind(this), 10);
  169.       }
  170.               
  171.       this.transport.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
  172.       this.transport.setRequestHeader('X-Prototype-Version', Prototype.Version);
  173.       if (this.options.method == 'post') {
  174.         this.transport.setRequestHeader('Connection', 'close');
  175.         this.transport.setRequestHeader('Content-type',
  176.           'application/x-www-form-urlencoded');
  177.       }
  178.       
  179.       this.transport.send(this.options.method == 'post' ? 
  180.         this.options.parameters + '&_=' : null);
  181.                       
  182.     } catch (e) {
  183.     }    
  184.   },
  185.       
  186.   onStateChange: function() {
  187.     var readyState = this.transport.readyState;
  188.     if (readyState != 1)
  189.       this.respondToReadyState(this.transport.readyState);
  190.   },
  191.   
  192.   respondToReadyState: function(readyState) {
  193.     var event = Ajax.Request.Events[readyState];
  194.     (this.options['on' + event] || Ajax.emptyFunction)(this.transport);
  195.   }
  196. });
  197. Ajax.Updater = Class.create();
  198. Ajax.Updater.prototype = (new Ajax.Base()).extend({
  199.   initialize: function(container, url, options) {
  200.     this.container = $(container);
  201.     this.setOptions(options);
  202.   
  203.     if (this.options.asynchronous) {
  204.       this.onComplete = this.options.onComplete;
  205.       this.options.onComplete = this.updateContent.bind(this);
  206.     }
  207.     
  208.     this.request = new Ajax.Request(url, this.options);
  209.     
  210.     if (!this.options.asynchronous)
  211.       this.updateContent();
  212.   },
  213.   
  214.   updateContent: function() {
  215.     if (this.options.insertion) {
  216.       new this.options.insertion(this.container,
  217.         this.request.transport.responseText);
  218.     } else {
  219.       this.container.innerHTML = this.request.transport.responseText;
  220.     }
  221.     if (this.onComplete) {
  222.       setTimeout((function() {this.onComplete(this.request)}).bind(this), 10);
  223.     }
  224.   }
  225. });
  226. //---------------------------------------------------form-----------------------------------------------------
  227. var Field = {
  228.   clear: function() {
  229.     for (var i = 0; i < arguments.length; i++)
  230.       $(arguments[i]).value = '';
  231.   },
  232.   focus: function(element) {
  233.     $(element).focus();
  234.   },
  235.   
  236.   present: function() {
  237.     for (var i = 0; i < arguments.length; i++)
  238.       if ($(arguments[i]).value == '') return false;
  239.     return true;
  240.   },
  241.   
  242.   select: function(element) {
  243.     $(element).select();
  244.   },
  245.    
  246.   activate: function(element) {
  247.     $(element).focus();
  248.     $(element).select();
  249.   }
  250. }
  251. /*--------------------------------------------------------------------------*/
  252. var Form = {
  253.   serialize: function(form) {
  254.     var elements = Form.getElements($(form));
  255.     var queryComponents = new Array();
  256.     
  257.     for (var i = 0; i < elements.length; i++) {
  258.       var queryComponent = Form.Element.serialize(elements[i]);
  259.       if (queryComponent)
  260.         queryComponents.push(queryComponent);
  261.     }
  262.     
  263.     return queryComponents.join('&');
  264.   },
  265.   
  266.   getElements: function(form) {
  267. form = $(form);
  268.     var elements = new Array();
  269.     for (tagName in Form.Element.Serializers) {
  270.       var tagElements = form.getElementsByTagName(tagName);
  271.       for (var j = 0; j < tagElements.length; j++)
  272.         elements.push(tagElements[j]);
  273.     }
  274.     return elements;
  275.   },
  276.   
  277.   disable: function(form) {
  278.     var elements = Form.getElements(form);
  279.     for (var i = 0; i < elements.length; i++) {
  280.       var element = elements[i];
  281.       element.blur();
  282.       element.disable = 'true';
  283.     }
  284.   },
  285.   focusFirstElement: function(form) {
  286.     form = $(form);
  287.     var elements = Form.getElements(form);
  288.     for (var i = 0; i < elements.length; i++) {
  289.       var element = elements[i];
  290.       if (element.type != 'hidden' && !element.disabled) {
  291.         Field.activate(element);
  292.         break;
  293.       }
  294.     }
  295.   },
  296.   reset: function(form) {
  297.     $(form).reset();
  298.   }
  299. }
  300. Form.Element = {
  301.   serialize: function(element) {
  302.     element = $(element);
  303.     var method = element.tagName.toLowerCase();
  304.     var parameter = Form.Element.Serializers[method](element);
  305.     
  306.     if (parameter)
  307.       return encodeURIComponent(parameter[0]) + '=' + 
  308.         encodeURIComponent(parameter[1]);                   
  309.   },
  310.   
  311.   getValue: function(element) {
  312.     element = $(element);
  313.     var method = element.tagName.toLowerCase();
  314.     var parameter = Form.Element.Serializers[method](element);
  315.     
  316.     if (parameter) 
  317.       return parameter[1];
  318.   }
  319. }
  320. Form.Element.Serializers = {
  321.   input: function(element) {
  322.     switch (element.type.toLowerCase()) {
  323.       case 'hidden':
  324.       case 'password':
  325.       case 'text':
  326.         return Form.Element.Serializers.textarea(element);
  327.       case 'checkbox':  
  328.       case 'radio':
  329.         return Form.Element.Serializers.inputSelector(element);
  330.     }
  331.     return false;
  332.   },
  333.   inputSelector: function(element) {
  334.     if (element.checked)
  335.       return [element.name, element.value];
  336.   },
  337.   textarea: function(element) {
  338.     return [element.name, element.value];
  339.   },
  340.   select: function(element) {
  341.     var index = element.selectedIndex;
  342.     var value = element.options[index].value || element.options[index].text;
  343.     return [element.name, (index >= 0) ? value : ''];
  344.   }
  345. }
  346. /*--------------------------------------------------------------------------*/
  347. var $F = Form.Element.getValue;
  348. /*--------------------------------------------------------------------------*/
  349. Abstract.TimedObserver = function() {}
  350. Abstract.TimedObserver.prototype = {
  351.   initialize: function(element, frequency, callback) {
  352.     this.frequency = frequency;
  353.     this.element   = $(element);
  354.     this.callback  = callback;
  355.     
  356.     this.lastValue = this.getValue();
  357.     this.registerCallback();
  358.   },
  359.   
  360.   registerCallback: function() {
  361.     setTimeout(this.onTimerEvent.bind(this), this.frequency * 1000);
  362.   },
  363.   
  364.   onTimerEvent: function() {
  365.     var value = this.getValue();
  366.     if (this.lastValue != value) {
  367.       this.callback(this.element, value);
  368.       this.lastValue = value;
  369.     }
  370.     
  371.     this.registerCallback();
  372.   }
  373. }
  374. Form.Element.Observer = Class.create();
  375. Form.Element.Observer.prototype = (new Abstract.TimedObserver()).extend({
  376.   getValue: function() {
  377.     return Form.Element.getValue(this.element);
  378.   }
  379. });
  380. Form.Observer = Class.create();
  381. Form.Observer.prototype = (new Abstract.TimedObserver()).extend({
  382.   getValue: function() {
  383.     return Form.serialize(this.element);
  384.   }
  385. });
  386. //---------------------------------------------------AjaxHelper------------------------------------------------
  387. var AjaxProxyUrl = new String("../ajax.aspx");
  388. var AjaxHelper = 
  389. {
  390.     
  391. Updater : function(ajaxTemplate, output, params, onComplete)
  392. {
  393. if (typeof output == 'string')
  394. {
  395. output = $(output);
  396. }
  397. var FormatContent = function(str)
  398. {
  399. var content = new String(str);
  400. var prefix = new String("<!--AjaxContent-->");
  401. content = content.substring(content.indexOf(prefix, 0) + prefix.length, content.length - 9);
  402. return content;
  403. }
  404. this.result="1";
  405. new Ajax.Request( AjaxProxyUrl,
  406. { onComplete: function(transport) 
  407.   { 
  408.     if (output != null)
  409.      { output.innerHTML = FormatContent(transport.responseText); }
  410.     if (onComplete != null) 
  411.      { onComplete(FormatContent(transport.responseText)) } 
  412.        }, parameters: params + '&AjaxTemplate=' + ajaxTemplate 
  413.     });
  414.     
  415.     return this.result;
  416. },
  417.   
  418. SerializeForm : function(form)
  419. {
  420. return Form.serialize(form);
  421. }
  422. }