`

AJAX愉快之旅——prototype.js篇

阅读更多

AJAX 愉快之旅—— prototype.js <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>

 

对于什么是 ajax 等初级问题,不在本文讨论范围,本文主要围绕一个框架,以程序实例进行了详细总结。由于本人水平所限,所以不完善的地方很多。大家可以跟帖提醒。

 

以前用 jsp ,我用过 prototype.js ajax 框架,也用过 dwr 框架,还用过 buffalo 框架。但是现在项目使用 php 开发,我才再一次重新认识这位老朋友—— prototype.js 。我想说这个开源框架真是太棒了!

 

(1)       取数据的时候显示一个进度 loading

Ajax . Responders . register 注册后,在 ajax 发送 xmlhttp 时候,响应两事件。 onCreate

onComplete 非常棒。可以先写好一个小小的 div 隐藏在那里,伺机而动, J

 

var AjaxLog = {

       onCreate : function ()

           {

              Ajax . activeRequestCount ++;

              $ ( "Div_Ajax_Log" ). style . top = document . body . scrollTop + 230 ;

              $ ( "Div_Ajax_Log" ). style . left = document . body . scrollLeft + document . body . clientWidth / 3 ;

              $ ( "Div_Ajax_Log" ). style . display = "" ;

           },

       onComplete : function ()

           {

                Ajax . activeRequestCount --;

              $ ( "Div_Ajax_Log" ). style . display = "none" ;

           }

};

Ajax . Responders . register ( AjaxLog );

 

Div_Ajax_Log DIV id . 其代码:(当然还有一些 CSS 什么的就没有帖出来了。)

 

 

(2)       json 支持非常好

 

function setLogDate ()

{

    var count   =   getPram ();

    var url   =   "ajax.php" ;

    var kptl=

       {

           get_log_cmd:

           {

              log_type:"file",

              log_time_start:"1122",

              log_time_end:"1122",

              log_count_page:"30",

              log_request_page:"1",

              userSession :"hhh",

              mode_id:"1001"

           }

       }

// json 参数 转化为字符串

    var parm  =  Object.toJSON(kptl);

//  parm  =  "kptl = " + parm;

    try

    {

       var <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /?><city w:st="on"><place w:st="on"><span style="COLOR: black">ajax</span> </place></city>  =   new Ajax . Request (

                                url ,

                                {

                                   method : "post" ,

                                   parameters : parm ,  

                                   encodeURI : 'UTF-8' ,

                                   encodeURIComponent : "UTF-8" ,

                                   onComplete : showReturn

                                });

    }

    catch ( e )

    {

       alert ( " 创建 ajax 对象失败 " );

    }

}

/*

  * @brief: 回调函数

  * @param: xmlhttp 对象

  */

function showReturn ( obj )

{

    try

    {

       var json   =   obj . responseText ;

       var mydata  =  json.evalJSON();

       createLogTab ( mydata );

    }

    catch ( e )

    {

       alert ( "Error:" + e . message );

    }

}

红色字体将返回字符串转换为 JSON

这里返回的数据作为参数,调用 createLogTab ( mydata ); 由于我这里是返回一个数组。 web 页面写成一个 tablie 。所以有 createLogTab 函数。

function createLogTab ( json )

{

    var len = json . length ;

    var tbody = document . getElementById ( 'TBODY_log' );

    // 删除原有数据

    var _tr = tbody . getElementsByTagName ( "tr" );

    while ( _tr . length != 0 )

    {

       // _tr [ 0 ]. parentNode 才能保证每次取到正确的子节点

       _tr [ 0 ]. parentNode . removeChild ( _tr [ 0 ]);

    }

    for ( i = 0 ; i < len ; i ++)

    {

       var td_0 = document . createElement ( 'td' );  

       var td_1 = document . createElement ( 'td' );

       var td_2 = document . createElement ( 'td' );

       var td_3 = document . createElement ( 'td' );

       var td_4 = document . createElement ( 'td' );

       var td_5 = document . createElement ( 'td' );

       td_0 . innerHTML = json [ i ][ "client_name" ];

       td_1 . innerHTML = json [ i ][ "client_ip" ];

       td_2 . innerHTML = json [ i ][ "file_name" ];

       td_3 . innerHTML = json [ i ][ "viruses_name" ];

       td_4 . innerHTML = json [ i ][ "infection_time" ];

       td_5 . innerHTML = json [ i ][ "clear_result" ];

      

       var tr = document . createElement ( 'tr' );

       tr . appendChild ( td_0 );

       tr . appendChild ( td_1 );

       tr . appendChild ( td_2 );

       tr . appendChild ( td_3 );

       tr . appendChild ( td_4 );

       tr . appendChild ( td_5 );

       tbody . appendChild ( tr );

       }

}

题外话,这个 DOM 编程部分曾犯了个经典错误。主要是 while 删除子节点部分,当时用了 for 语句:

for(k=0; k<_tr.length;k++)

{

    alert("k:"+k);

    _tr[k].parentNode.removeChild(_tr[k]);

}

知道是什么错误吗?呵呵,因为 _tr.length 在不停的变。每次删一个就长度就少了(而 K 很快到达停止循环的条件)。所以最终都是删不干净的。

 

(3) 替换整个节点控件

<script>

    function getHTML()

    {

        var url = 'http://yourserver/app/getSomeHTML';

        var pars = 'someParameter=ABC';

        var myAjax = new Ajax.Updater('placeholder', url, {method: 'get', parameters: pars});

 

    }

</script>

<input type=button value=GetHtml onclick="getHTML()">

<div id="placeholder"></div>

这个非常好玩,眨眼间整体 DIV 都变了。我记得曾经犯了个错,就是参数。这里参数别写多了。

有问题可以访问官方网站:

http://www.prototypejs.org/ 【下载一本手册吧,呵呵】

 

当然对本有新的想法或者疑问,欢迎留言交流。

 

分享到:
评论

相关推荐

    prototype.js的系列文章

    prototype.js的系列文章——$H()函数 百度的Ajax.js文件 常用JS ...prototype.js的系列文章——Ajax.Request类 prototype.js的系列文章——Ajax.Updater类 prototype.js的系列文章——Try.these())函数

    prototype_1.7.3.js 最新版本

    除此之外,Prototype_1.7.3.js还提供了丰富的AJAX(异步JavaScript和XML)功能。它简化了与服务器的通信,使得动态更新页面内容变得轻而易举。`Ajax.Request`和`Ajax.Updater`是其中两个关键的类,它们分别用于发起...

    prototype.js

    《prototype.js:JavaScript框架的核心与应用》 在Web开发领域,JavaScript库和框架极大地提高了开发效率,其中Prototype.js就是一款非常流行的开源JavaScript框架。本文将深入探讨Prototype.js的核心概念、功能...

    prototype.js简介

    7. **字符串和对象操作** - prototype.js 也增强了String和Object对象,例如`String.prototype.parseColor()`解析颜色值,`Object.toJSON()`将对象转换成JSON格式。 通过学习和使用prototype.js,开发者可以编写出...

    prototype.js 1.4-1.6[全]

    《Prototype.js 1.4-1.6:JavaScript 动态原型框架的探索与实践》 Prototype.js 是一个广泛使用的JavaScript库,它扩展了JavaScript语言的功能,为开发人员提供了更强大的面向对象编程支持。该库的核心特性是其对...

    prototype.js中文手册

    它在Web开发中扮演着重要的角色,尤其在AJAX(异步JavaScript和XML)应用中,Prototype.js 提供了丰富的功能和工具,使得开发者能更高效地编写JavaScript代码。 ### 一、Prototype.js核心特性 1. **DOM操作**:...

    prototype.js文件使用和讲解

    - **Ajax支持**:`prototype.js`提供了一套完整的Ajax解决方案,包括`Ajax.Request`、`Ajax.Updater`和`Ajax.PeriodicalUpdater`等类,使得异步通信更为简便。 - **事件处理**:它增强了事件处理机制,允许绑定和...

    prototype.js javaScript插件

    "Prototype.js"是一个针对JavaScript的开源库,旨在增强和扩展JavaScript的基本功能,尤其在处理DOM(文档对象模型)操作、事件处理以及Ajax交互时提供了极大的便利。 ### 1. Prototype.js核心概念 - **原型链**:...

    prototype.js 1.4版开发者手册(强烈推荐)

    《prototype.js 1.4版开发者手册》是JavaScript开发领域中的一个重要参考资料,尤其对于那些希望深入理解并利用Prototype库的开发者来说,它是一份不可多得的资源。Prototype.js是一个强大的JavaScript库,由Sam ...

    prototype.js 1.6中文手册、prototype.js 1.6英文手册、

    Prototype.js 1.6中的AJAX(异步JavaScript和XML)功能大大简化了与服务器的通信。`Ajax.Request`和`Ajax.Updater`是核心组件,前者用于发送请求,后者用于更新页面的一部分。它们都支持多种HTTP方法(GET、POST等...

    prototype.js 1.6

    Prototype.js 的核心理念是扩展 JavaScript 的内建对象,提供类(Class)系统、DOM 操作、Ajax 支持和丰富的函数工具。通过这个库,开发者可以使用类似于面向对象编程的方式来编写 JavaScript,使得代码更加结构化和...

    prototype.js jquery.js 打包下载(包含各自的API)

    1. **对象扩展**:Prototype通过扩展JavaScript的内置类型,如Array、String、Function等,添加了许多实用方法,例如`Array.prototype.each`用于迭代数组,`String.prototype.trim`用于去除字符串两端的空白。...

    prototype.js 实例

    首先,Prototype.js的核心在于其强大的对象扩展和函数助手,比如`Object.extend`用于合并对象,`Array.prototype.each`用于遍历数组等。这些工具使得JavaScript代码更加简洁、可读性更强。 弹出窗口在Web开发中常见...

    prototype.js_v1.6_含中英文手册

     prototype.js是一个非常优雅的javascript基础类库,对javascript做了大量的扩展,而且很好的支持Ajax,国外有多个基于此类库实现的效果库,也做得很棒。  prototype.js不仅是一个有很大实用价值的js库,而且有很...

    prototype.js.cn.doc.rar

    Prototype.js是一款强大的JavaScript库,由Sam Stephenson开发,旨在简化JavaScript的编程,提供了一系列实用的函数和类扩展,增强了JavaScript的基本功能。这款库的核心理念是通过类原型(Class Prototyping)实现...

    ajax:prototype.js很全的手册

    Prototype.js是一个JavaScript库,它为Web开发提供了丰富的功能,特别是针对Ajax交互。Ajax,即异步JavaScript和XML,是一种在不刷新整个页面的情况下更新部分网页内容的技术。Prototype.js通过简化DOM操作、事件...

    prototype.js开发笔记.pdf

    Prototype.js提供了许多document DOM对象的扩展,例如Document.prototype.getElementById()、Document.prototype.getElementsByClassName()等。 2.7. 对 Event 对象的扩展 Prototype.js提供了许多Event对象的扩展...

    prototype.js 以及 找到的 相关使用详细说明

    - **模拟类(Class)系统**:JavaScript原生不支持类,但Prototype.js通过`Class`和`Function.prototype.extend`等工具模拟了面向对象编程的类继承结构。 ### 2. 使用Prototype.js进行Ajax交互 Ajax是Asynchronous...

Global site tag (gtag.js) - Google Analytics