基于jQuery的面向dom的ajax编程

文章分类:jQuery  查看次数:733 + 125

不知道这么说合不合理,或者也可以叫做是模块化编程。

好处:

  • html页,只有html元素,数据全部通过,以的方式来提供。
  • 页面,美工,前台编程,后台编程,分工更加明确
  • 更有利于的部署

适用范围:数据量不是很大的页面,同时要有很好的用户体验。

下面用一个实例来说明这个编程思想


假设我们需要在客户端显示一些数据,这些数据以表格为容器。

所以html页就可以设计为

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<link type="text/css" href="table.css" rel="stylesheet"/>
</head>
<body>
<div id="personal_info">
    <div id="info_loading">loading...</div>
    <table class="info" style="display:none">
        <thead>
            <tr>
                <th>姓名</th>
                <th>出生年月</th>
                <th>性别</th>
                <th>职业</th>
                <th>薪水</th>
                <th>简介</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
            </tr>
        </tbody>
    </table>
</div>
<script src=".pack.js"></script>
<script src="dom_control.js"></script>
</body>
</html>
 

可以看到,里面只有框架,没有任何数据
这里,我把两个js文件放在了最下面,这是为了避免在载入这两个js文件时,页面空白

下面就该编辑那个dom_control.js了。我先把源码放上来:

//当页面全部载入时执行下面的函数
$(function(){
    //这两步可以省去
    //隐藏表格
    $(".info").hide();
    //显示loading
    $("#info_loading").html("loading...");
});

//当id为personal_info的载入完成时执行下面的函数
$("#personal_info").ready(function(){
    //$tbody指代的是#personal_info->table->tbody
    $tbody = $("#personal_info table tbody");
    //执行
    $.({
        //type指示是get还是post
        type:"get",
        //目标文件
        url:"data.php",
        //返回的数据类型
        dataType:"",
        //载入发生错误时,显示错误信息
        error:function(obj,errno){
            $("#info_loading").html(errno);
        },
        //载入成功时,执行下面的函数
        success:function(data){
            $(".info").show();
            $("#info_loading").hide();
            //data是从服务端返回的数据
            data = data.personal_info;
            //遍历data数据
            $.each(data,function(i,n){
                //克隆$tbody的第一个tr
                $tr = $tbody.children("tr:first").clone();
                //eq(0)对应第一个单元格,以此类推
                $("td:eq(0)",$tr).text(n["name"]);
                $("td:eq(1)",$tr).text(n["birth"]);
                $("td:eq(2)",$tr).text(n["sex"]);
                $("td:eq(3)",$tr).text(n["job"]);
                $("td:eq(4)",$tr).text(n["salary"]);
                $("td:eq(5)",$tr).text(n["intro"]);
                //附加到$tbody上
                $tr.appendTo($tbody);
            });
            //移去第一个tr,因为它什么数据都没有
            $tbody.children("tr:first").remove();
            //分别对tr的奇数行和偶数行添加class
            $("tr:odd",$tbody).addClass("odd");
            $("tr:even",$tbody).addClass("even");
            //对$tbody下面的tr元素附加hover函数,分别定义当鼠标滑过和移走时的函数
            $("tr",$tbody).hover(function(){
                //当鼠标滑过时,添加hover class
                $(this).addClass("hover");
                },function(){
                //当鼠标移走时,移去hover class
                $(this).removeClass("hover");
            });
        }
    });
});
 

注释都很详细,应该能看得懂,基本的思想就是,当id为personal_info的div载入完成后,通过,来取得data.php传递过来的数据,然后将数据放到对应的单元格里,最后设置一下表格的一些事件。

data.php源文件:

include("-utf8.php");
$data["personal_info"] = array();
$data["personal_info"][0] = array("name"=>"LZYY","birth"=>"1984-12-18","sex"=>"男","job"=>"暂无","salary"=>"0","intro"=>"长使英雄泪满襟");
$data["personal_info"][1] = array("name"=>"张三","birth"=>"1985-12-18","sex"=>"女","job"=>"秘书","salary"=>"3000","intro"=>"社会主义好");
$data["personal_info"][2] = array("name"=>"李四","birth"=>"1986-12-18","sex"=>"男","job"=>"司机","salary"=>"2500","intro"=>"我是开车的");
$data["personal_info"][3] = array("name"=>"王五","birth"=>"1987-12-18","sex"=>"女","job"=>"销售","salary"=>"4000","intro"=>"大家好");
$data["personal_info"][4] = array("name"=>"赵六","birth"=>"1988-12-18","sex"=>"男","job"=>"网页设计","salary"=>"2000","intro"=>"好没前途啊");
$ = new Services_JSON();
$output = $->encode($data);
header("Content-type:text/plain;charset=utf-8");
echo $output;
 

其中用到了-utf8.php,如果php版本是5.2的话,就可以不用载入这个文件而直接使用json_encode($data);

如果还有其他数据,比如article_title,那么就可以建立一个数组:$data["article_title"],在客户端,可以通过article_title=data.article_title来取得。

演示:

http://www.live-my-life-with-yuyi.com/lab/dom_jquery/my_test.html

源文件下载

评论

发表评论