ajax -- prototype 学习(转贴)

深入学习前端技术:AJAX, EXTJS, jQuery, DWR, Prototype AJAX(Asynchronous JavaScript and XML)是一种无需重新加载整个页面,而能够更新部分网页的技术。它利用了JavaScript在浏览器端与服务器进行异步通信的能力。AJAX的核心在于通过XMLHttpRequest对象发送异步请求,根据返回的数据动态更新网页内容,从而实现更加流畅的用户体验。EXTJS是一个用纯JavaScript编写的开源框架,最初由Jack Slocum开发,基于YUI Library(Yahoo! 阅读详情

具体的转贴位置不太记得了。。希望原作者看到留言。谢谢你的这篇文章。。学习prototype真的是不错的资料prototype.js 代码:

/**

 * 定义一个全局对象, 属性 Version 在发布的时候会替换为当前版本号

 */

var Prototype = {

  Version: '@@VERSION@@'

}


/**

 * 创建一种类型,注意其属性 create 是一个方法,返回一个构造函数。

 * 一般使用如下

 *     var X = Class.create();  返回一个类型,类似于 java 的一个

 * Class实例。

 * 要使用 X 类型,需继续用 new X()来获取一个实例,如同 java 的

 * Class.newInstance()方法。

 *

 * 返回的构造函数会执行名为 initialize 的方法, initialize 是

 * Ruby 对象的构造器方法名字。

 * 此时initialize方法还没有定义,其后的代码中创建新类型时会建立

 * 相应的同名方法。

 *

 * 如果一定要从java上去理解。你可以理解为用Class.create()创建一个

 * 继承java.lang.Class类的类。

 * 当然java不允许这样做,因为Class类是final的

 *

 */

var Class = {

  create: function() {

    return function() {

      this.initialize.apply(this, arguments);

    }

  }

}


/**

 * 创建一个对象,从变量名来思考,本意也许是定义一个抽象类,以后创建

 * 新对象都 extend 它。

 * 但从其后代码的应用来看, Abstract 更多是为了保持命名空间清晰的考虑。

 * 也就是说,我们可以给 Abstract 这个对象实例添加新的对象定义。

 *

 * 从java去理解,就是动态给一个对象创建内部类。

 */

var Abstract = new Object();


/**

 * 获取参数对象的所有属性和方法,有点象多重继承。但是这种继承是动态获得的。

 * 如:

 *     var a = new ObjectA(), b = new ObjectB();

 *     var c = a.extend(b);

 * 此时 c 对象同时拥有 a 和 b 对象的属性和方法。但是与多重继承不同的是,

 * c instanceof ObjectB 将返回false。

 */

Object.prototype.extend = function(object) {

  for (property in object) {

    this[property] = object[property];

  }

  return this;

}


/**

 * 这个方法很有趣,它封装一个javascript函数对象,返回一个新函数对象,新函

 * 数对象的主体和原对象相同,但是bind()方法参数将被用作当前对象的对象。

 * 也就是说新函数中的 this 引用被改变为参数提供的对象。

 * 比如:

 * <input type="text" id="aaa" value="aaa">

 * <input type="text" id="bbb" value="bbb">

 * .................

 * <script>

 *     var aaa = document.getElementById("aaa");

 *     var bbb = document.getElementById("bbb");

 *     aaa.showValue = function() {alert(this.value);}

 *     aaa.showValue2 = aaa.showValue.bind(bbb);

 * </script>

 *  那么,调用aaa.showValue 将返回"aaa",

 *  但调用aaa.showValue2 将返回"bbb"。

 *

 * apply 是ie5.5后才出现的新方法(Netscape好像很早就支持了)。

 * 该方法更多的资料参考MSDN

 * http://msdn.microsoft.com/library/en-us/script56/html/js56jsmthApply.asp

 * 还有一个 call 方法,应用起来和 apply 类似。可以一起研究下。

 */

Function.prototype.bind = function(object) {

  var method = this;

  return function() {

    method.apply(object, arguments);

  }

}


/**

 * 和bind一样,不过这个方法一般用做html控件对象的事件处理。所以要传递event对象

 * 注意这时候,用到了 Function.call。它与 Function.apply 的不同好像仅仅是对参

 * 数形式的定义。如同 java 两个过载的方法。

 */

Function.prototype.bindAsEventListener = function(object) {

  var method = this;

  return function(event) {

    method.call(object, event || window.event);

  }

}


/**

 * 将整数形式RGB颜色值转换为HEX形式

 */

Number.prototype.toColorPart = function() {

  var digits = this.toString(16);

  if (this < 16) return '0' + digits;

  return digits;

}


/**

 * 典型 Ruby 风格的函数,将参数中的方法逐个调用,返回第一个成功执行的方法的返回值

 */

var Try = {

  these: function() {

    var returnValue;


    for (var i = 0; i < arguments.length; i++) {

      var lambda = arguments[i];

      try {

        returnValue = lambda();

        break;

      } catch (e) {}

    }


    return returnValue;

  }

}


/*--------------------------------------------------------------------------*/


/**

 * 一个设计精巧的定时执行器

 * 首先由 Class.create() 创建一个 PeriodicalExecuter 类型,

 * 然后用对象直接量的语法形式设置原型。

 *

 * 需要特别说明的是 rgisterCallback 方法,它调用上面定义的函数原型方法bind,

 * 并传递自己为参数。

 * 之所以这样做,是因为 setTimeout 默认总以 window 对象为当前对象,也就是说,

 * 如果 registerCallback 方法定义如下的话:

 *     registerCallback: function() {

 *         setTimeout(this.onTimerEvent, this.frequency * 1000);

 *     }

 * 那么,this.onTimeoutEvent 方法执行失败,因为它无法

 * 访问 this.currentlyExecuting 属性。

 * 而使用了bind以后,该方法才能正确的找到this,

 * 也就是PeriodicalExecuter的当前实例。

 */

var PeriodicalExecuter = Class.create();

PeriodicalExecuter.prototype = {

  initialize: function(callback, frequency) {

    this.callback = callback;

    this.frequency = frequency;

    this.currentlyExecuting = false;


    this.registerCallback();

  },


  registerCallback: function() {

    setTimeout(this.onTimerEvent.bind(this), this.frequency * 1000);

  },


  onTimerEvent: function() {

    if (!this.currentlyExecuting) {

      try {

        this.currentlyExecuting = true;

        this.callback();

      } finally {

        this.currentlyExecuting = false;

      }

    }


    this.registerCallback();

  }

}


/*--------------------------------------------------------------------------*/


/**

 * 这个函数就 Ruby 了。我觉得它的作用主要有两个

 * 1.  大概是 document.getElementById(id) 的最简化调用。

 * 比如:$("aaa") 将返回上 aaa 对象

 * 2.  得到对象数组

 * 比如: $("aaa","bbb") 返回一个包括id为

 * "aaa"和"bbb"两个input控件对象的数组。

 */

function $() {

  var elements = new Array();


  for (var i = 0; i < arguments.length; i++) {

    var element = arguments[i];

    if (typeof element == 'string')

      element = document.getElementById(element);


    if (arguments.length == 1)

      return element;


    elements.push(element);

  }


  return elements;

}

 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

ajax.js 代码:

/**

 * 定义 Ajax 对象, 静态方法 getTransport 方法返回一个 XMLHttp 对象

 */

var Ajax = {

  getTransport: function() {

    return Try.these(

      function() {return new ActiveXObject('Msxml2.XMLHTTP')},

      function() {return new ActiveXObject('Microsoft.XMLHTTP')},

      function() {return new XMLHttpRequest()}

    ) || false;

  },


  emptyFunction: function() {}

}


/**

 * 我以为此时的Ajax对象起到命名空间的作用。

 * Ajax.Base 声明为一个基础对象类型

 * 注意 Ajax.Base 并没有使用 Class.create() 的方式来创建,我想是因为作者并不

 * 希望 Ajax.Base 被库使用者实例化。

 * 作者在其他对象类型的声明中,将会继承于它。

 * 就好像 java 中的私有抽象类

 */

Ajax.Base = function() {};

Ajax.Base.prototype = {

  /**

   * extend (见prototype.js中的定义) 的用法真是让人耳目一新

   * options 首先设置默认属性,然后再 extend 参数对象,那么参数对象中也有同名

   * 的属性,那么就覆盖默认属性值。

   * 想想如果我写这样的实现,应该类似如下:

     setOptions: function(options) {

      this.options.methed = options.methed? options.methed : 'post';

      ..........

     }

     我想很多时候,java 限制了 js 的创意。

   */

  setOptions: function(options) {

    this.options = {

      method:       'post',

      asynchronous: true,

      parameters:   ''

    }.extend(options || {});

  }

}



/**

 * Ajax.Request 封装 XmlHttp

 */

Ajax.Request = Class.create();


/**

 * 定义四种事件(状态), 参考

 * http://msdn.microsoft.com/workshop/

 * author/dhtml/reference/properties/readystate_1.asp

 */

Ajax.Request.Events =

  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];


/**

 *

 */

Ajax.Request.prototype = (new Ajax.Base()).extend({

  initialize: function(url, options) {

    this.transport = Ajax.getTransport();

    this.setOptions(options);


    try {

      if (this.options.method == 'get')

        url += '?' + this.options.parameters + '&_=';


     /**

      * 此处好像强制使用了异步方式,而不是依照 this.options.asynchronous 的值

      */

      this.transport.open(this.options.method, url, true);


     /**

      * 这里提供了 XmlHttp 传输过程中每个步骤的回调函数

      */

      if (this.options.asynchronous) {

        this.transport.onreadystatechange = this.onStateChange.bind(this);

        setTimeout((function() {this.respondToReadyState(1)}).bind(this), 10);

      }


      this.transport.setRequestHeader('X-Requested-With', 'XMLHttpRequest');

      this.transport.setRequestHeader('X-Prototype-Version', Prototype.Version);


      if (this.options.method == 'post') {

        this.transport.setRequestHeader('Connection', 'close');

        this.transport.setRequestHeader('Content-type',

          'application/x-www-form-urlencoded');

      }


      this.transport.send(this.options.method == 'post' ?

        this.options.parameters + '&_=' : null);


    } catch (e) {

    }

  },


  onStateChange: function() {

    var readyState = this.transport.readyState;

   /**

    * 如果不是 Loading 状态,就调用回调函数

     */

    if (readyState != 1)

      this.respondToReadyState(this.transport.readyState);

  },


  /**

   * 回调函数定义在 this.options 属性中,比如:

      var option = {

         onLoaded : function(req) {...};

         ......

      }

      new Ajax.Request(url, option);

   */

  respondToReadyState: function(readyState) {

    var event = Ajax.Request.Events[readyState];

    (this.options['on' + event] || Ajax.emptyFunction)(this.transport);

  }

});


/**

 * Ajax.Updater 用于绑定一个html元素与 XmlHttp调用的返回值。

 * 类似与 buffalo 的 bind。

 * 如果 options 中有 insertion(from dom.js) 对象的话,

 * insertion 能提供更多的插入控制。

 */

Ajax.Updater = Class.create();

Ajax.Updater.prototype = (new Ajax.Base()).extend({

  initialize: function(container, url, options) {

    this.container = $(container);

    this.setOptions(options);


    if (this.options.asynchronous) {

      this.onComplete = this.options.onComplete;

      this.options.onComplete = this.updateContent.bind(this);

    }


    this.request = new Ajax.Request(url, this.options);


    if (!this.options.asynchronous)

      this.updateContent();

  },


  updateContent: function() {

    if (this.options.insertion) {

      new this.options.insertion(this.container,

        this.request.transport.responseText);

    } else {

      this.container.innerHTML = this.request.transport.responseText;

    }


    if (this.onComplete) {

      setTimeout((function() {this.onComplete(this.request)}).bind(this), 10);

    }

  }

}); 

 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
form.js的代码
/**

 * 针对 页面元素对象 的工具类,提供一些简单静态方法

 */

var Field = {

  /**

   * 清除参数引用对象的值

   */

  clear: function() {

    for (var i = 0; i < arguments.length; i++)

      $(arguments[i]).value = '';

  },


  /**

   * 使参数引用对象获取焦点

   */

  focus: function(element) {

    $(element).focus();

  },


  /**

   * 判断参数引用对象值是否为空,如为空,返回false, 反之true

   */

  present: function() {

    for (var i = 0; i < arguments.length; i++)

      if ($(arguments[i]).value == '') return false;

    return true;

  },


  /**

   * 使选中参数引用对象

   */

  select: function(element) {

    $(element).select();

  },


  /**

   * 使参数引用对象处于可编辑状态

   */

  activate: function(element) {

    $(element).focus();

    $(element).select();

  }

}


/*-----------------------------------------------------------------*/


/**

 * 表单工具类

 */

var Form = {

  /**

   * 将表单元素序列化后的值组合成 QueryString 的形式

   */

  serialize: function(form) {

    var elements = Form.getElements($(form));

    var queryComponents = new Array();


    for (var i = 0; i < elements.length; i++) {

      var queryComponent = Form.Element.serialize(elements[i]);

      if (queryComponent)

        queryComponents.push(queryComponent);

    }


    return queryComponents.join('&');

  },


  /**

   * 得到表单的所有元素对象

   */

  getElements: function(form) {

    form = $(form);

    var elements = new Array();


    for (tagName in Form.Element.Serializers) {

      var tagElements = form.getElementsByTagName(tagName);

      for (var j = 0; j < tagElements.length; j++)

        elements.push(tagElements[j]);

    }

    return elements;

  },


  /**

   * 将指定表单的元素置于不可用状态

   */

  disable: function(form) {

    var elements = Form.getElements(form);

    for (var i = 0; i < elements.length; i++) {

      var element = elements[i];

      element.blur();

      element.disable = 'true';

    }

  },


  /**

   * 使表单的第一个非 hidden 类型而且处于可用状态的元素获得焦点

   */

  focusFirstElement: function(form) {

    form = $(form);

    var elements = Form.getElements(form);

    for (var i = 0; i < elements.length; i++) {

      var element = elements[i];

      if (element.type != 'hidden' && !element.disabled) {

        Field.activate(element);

        break;

      }

    }

  },


  /*

   * 重置表单

   */

  reset: function(form) {

    $(form).reset();

  }

}


/**

 * 表单元素工具类

 */

Form.Element = {

  /**

   * 返回表单元素的值先序列化再进行 URL 编码后的值

   */

  serialize: function(element) {

    element = $(element);

    var method = element.tagName.toLowerCase();

    var parameter = Form.Element.Serializers[method](element);


    if (parameter)

      return encodeURIComponent(parameter[0]) + '=' +

        encodeURIComponent(parameter[1]);

  },


  /**

   *  返回表单元素序列化后的值

   */

  getValue: function(element) {

    element = $(element);

    var method = element.tagName.toLowerCase();

    var parameter = Form.Element.Serializers[method](element);


    if (parameter)

      return parameter[1];

  }

}


/**

 * prototype 的所谓序列化其实就是将表单的名字和值组合成一个数组

 */

Form.Element.Serializers = {

  input: function(element) {

    switch (element.type.toLowerCase()) {

      case 'hidden':

      case 'password':

      case 'text':

        return Form.Element.Serializers.textarea(element);

      case 'checkbox':

      case 'radio':

        return Form.Element.Serializers.inputSelector(element);

    }

    return false;

  },


  inputSelector: function(element) {

    if (element.checked)

      return [element.name, element.value];

  },


  textarea: function(element) {

    return [element.name, element.value];

  },


  /**

   * 看样子,也不支持多选框(select-multiple)

   */

  select: function(element) {

    var index = element.selectedIndex;

    var value = element.options[index].value || element.options[index].text;

    return [element.name, (index >= 0) ? value : ''];

  }

}


/*--------------------------------------------------------------------------*/


/**

 * Form.Element.getValue 也许会经常用到,所以做了一个快捷引用

 */

var $F = Form.Element.getValue;


/*--------------------------------------------------------------------------*/


/**

  

常微分方程 (ODE) 和 随机微分方程 (SDE) 常微分方程(Ordinary Differential Equations, ODE)和随机微分方程(Stochastic Differential Equations, SDE)是数学中描述系统动态行为的重要工具。它们有一些相似之处,但在处理随机性方面存在显著差异。 阅读详情

相关推荐

Linux系统遭遇挖矿病毒深度排查与根治指南

本文提供了一份详尽的Linux服务器挖矿病毒排查与根治指南。当CPU异常满载但常规top命令无法定位进程时,需警惕病毒通过ld.so.preload文件隐藏。文章逐步指导如何清除恶意文件、进程、定时任务,并重点应对pamdicks等顽固变种,最后给出深度排查与系统加固方案,确保服务器安全。

weixin_29207533的博客 454

Ajax::prototype 源码解读 之 prototype.js [转]

[code="javascript"] Ajax::prototype 源码解读 之 prototype.js 一[转载] /** * 定义一个全局对象, 属性 Version 在发布的时候会替换为当前版本号 */ var Prototype = { Version: '@@VERSION@@' } /** * 创建一种类型,注意其属性 create 是一个方法,返...

qinglangee的专栏 180

GEE——土地利用分类之监督分类

利用GEE做监督分类,以武汉市为例。 训练器我们选择随机森林;数据选择Landsat-8;训练样本使用的是GEE提供的一种,它把地表分为三类:水体、植被和城市用地。 选择训练样本 用要素集来标记训练样本。每个要素都有一个landcover 的属性,0表示城市用地,1表示植被,2表示水体。 对影像进行分类 其中一部分进行分类器的训练,还有一部分留下来做精度验证。 输出影像及混淆矩阵 print(LABEL_DATA); var wuhan = ee.FeatureCollection('users/

qq_41600680的博客 1万+

prototype.js之ajax.request学习笔记(一)

<br />这二天用prototype.js中的ajax.request做了些东西,闲时看了下源码,体会如下:<br />  在用AJAX部分前,有如下一些函数得了解一下:<br />  Class变量var Class = {<br />  create: function() {<br />    return function() {<br />      this.initialize.apply(this, arguments);<br />    }<br />  }<br />}<br /><

zth603的专栏 1813

小智AI语音控制实战:从工具注册到音量调节的MCP交互全流程

本文详细拆解了基于小智AI与MCP协议实现本地智能语音控制的完整交互流程。以ESP32平台为例,从开发环境搭建、MCP服务器初始化、工具注册,到用户语音指令的接收、解析、硬件执行与结果反馈,提供了全链路实战代码。重点阐述了如何通过MCP协议将AI的意图理解与设备功能执行在本地高效耦合,实现毫秒级响应的音量调节等控制,为嵌入式AI开发者提供了清晰的实现路径。

weixin_29165725的博客 347

分类预测 | MATLAB实现ELM极限学习机多特征分类预测(二分类)

分类预测 | MATLAB实现ELM极限学习机多特征分类预测(二分类)

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 780

Ajax::prototype 源码解读

AJAX之旅(1):由prototype_1.3.1进入javascript殿堂-类的初探 还是决定冠上ajax的头衔,毕竟很多人会用这个关键词搜索。虽然我认为这只是个炒作的概念,不过不得不承认ajax叫起来要方便多了。所以ajax的意思我就不详细解释了。写这个教程的起因很简单:经过一段时间的ajax学习,有一些体会,并且越发认识到ajax技术的强大,所以决定记录下来,顺便也是对自己思路的整理。有

玩转比特币,解密新技术——imfly的专栏 5228

2023年电工杯 | 2023年电工杯数学建模竞赛思路(A题、B题)

2023年电工杯 | 2023年电工杯数学建模竞赛思路(A题、B题)

前程算法屋的博客 5593

AJAX之Prototype入门学习

什么是Prototype  Prototype 是由 Sam Stephenson 开发的一个 Javascript 类库,也是其他框架的鼻祖。其对现有的部分 Javascript 对象比如 Object 、 Function 、 Dom 、 String 等进行扩展,并且对 Ajax 应用进行封装,借此提供了兼容标准的更加易于使用的类库,极大的方便开发人员快速创建具备高度交互性的 Web

代码将军 2576

dolphinscheduler-3.4.0

dolphinscheduler集群部署

docsz的博客 661

【DaVinci Configurator专题】-2-将CAN 2.0或CANFD Matrix的Arxml/DBC文件导入到CFG

共9页 目录 1 打开DaVinci Configurator,导入Arxml文件 2 解决导入Arxml文件后可能会出现的一些错误 3 验证CFG的配置 4 根据CFG的配置生成代码 5 结尾 <--返回「实战篇」博文-总目录--> <--返回「Autosar从入门到精通-实战篇」专栏主页--> 关键词: Open the Input Files Assistant Complete update process Update ECU configurati

「汽车电子助手」的博客 6127

ajax prototype.js 学习手册

prototype.js开发笔记 Table of Contents 1. Programming Guide 1.1. Prototype是什么? 1.2. 关联文章 1.3. 通用性方法 1.3.1. 使用 $()方法 1.3.2. 使用$F()方法 1.3.3. 使用$A()方法 1.3.4. 使用$H()方法 1.3.5. 使用$R()方法 1.3.6. 使用Try.these()方法 1

天将降大任于是人 2462

数字滤波器应用介绍

线性滤波器FIR ,会引起恒定延迟,通过补零的方式补偿非线性滤波器IIR,会引起频率相关的延迟,通过零相位延迟filtfilt补偿从信号中去除不需要的频谱时,通过滤波和补偿实现。如果需要去除的频率与采样率相差甚远,比如4kHz 与100Hz, 可通过 低通滤波->补偿->降采样–> 滤波 补偿 -->上采样还原的方法。*降采样前一定要先低通滤波为了防止混叠。

weixin_39107270的博客 275

Prototype使用学习手册指南之ajax.js

和在我以前使用这个类库的不少开发者一样,一开始,我不得不一头扎进阅读prototype.js的源代码和实验它的功能中。Prototype中的ajax.js提供了一个非常好用的ajax框架,一般应用中简单的调用以下代码就可以了 new Ajax.Request( url, {method: “get”, onSuccess: showFilter, onFailure...

wutao33543的专栏 145

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

prototype ajax学习站点

http://www.aspxhome.com/chm/prototype/index.htm

crazy_fire 408

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

prototype.js ajax.request,prototype.js之ajax.request学习笔记(一)

这二天用prototype.js中的ajax.request做了些东西,闲时看了下源码,体会如下:在用AJAX部分前,有如下一些函数得了解一下:Class变量varClass={create:function(){returnfunction(){this.initialize.apply(this,arguments);}}}initialize相当于构造器,和java的构造器...

weixin_42659791的博客 456

prototype学习--Ajax.Updater

实现html页面中,加载数据到页面 1、prototype.js 2、js部分 &lt;script type="text/javascript"&gt; var url ='/pork/ep/reportEpLevel.do'; new Ajax.Updater( {success: 'eplevelDiv'}, url, ...

liuxi1024的专栏 199

java学习笔记_ajax框架ProtoType

什么是Prototype   Prototype 是由 Sam Stephenson 开发的一个 Javascript 类库,也是其他框架的鼻祖。其对现有的部分 Javascript 对象比如 Object 、 Function 、 Dom 、 String 等进行扩展,并且对 Ajax 应用进行封装,借此提供了兼容标准的更加易于使用的类库,极大的方便开发人员快速创建具备高度交互性的 We

今生今世的专栏 681

Prototype学习笔记之-Ajax.Request

Prototype学习笔记,试用Ajax.Request,发现个问题,先记下来。传了个参数进去,发现传中文会出现乱码! <scriptsrc="js/prototype.js"type="text/javascript"></script><scripttype="text/javascript">functionExecuteAjax(){...

weixin_30869099的博客 91

prototype的学习使用(二) Ajax的局部更新

Ajax对象 上面提到的共通方法非常好,但是面对它吧,它们不是最高级的那类东西。它们是吗?你很可能自己编写了这些甚至在你的脚本里面有类似功能的方法。但是这些方法只是冰山一角。我很肯定你对prototype.js感兴趣的原因很可能是由于它的AJAX能力。所以让我们解释当你需要完成AJAX逻辑的时候,这个包如何让它更容易。Ajax 对象是一个预定义对象,由这个包创建,为了封装和简化编写AJAX 功...

topMan'blog 93
上一篇: validator框架简单使用
下一篇: EJB3.0注标
touch_92java
博客等级 码龄19年 4粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值