码迷,mamicode.com
首页 > Web开发 > 详细

AJAX的应用

时间:2016-05-22 18:29:35      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:

用AJAX实现数据显示与删除事件

主页面:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script src="../jquery-1.11.2.min.js"></script>
<style type="text/css">
.sc
{ 
    width:70px;
    height:30px;
    background-color:#06F;
    color:#FFF;
    text-align:center;
    line-height:30px;
    vertical-align:middle;
    font-size:18px;
}
.sc:hover{ cursor:pointer;
background-color:#F60;}
</style>
</head>

<body>
<input type="button" id="btn" value="显示数据" />
<table id="xianshi" width="100%" border="1" cellpadding="0" cellspacing="0">
</table>
</body>
</html>
<script type="text/javascript">
$(document).ready(function(e) {
   
    $("#btn").click(function(){        
            ShowAll();
            Bindsc();                
        })
        
        function Bindsc()   //绑定删除事件
        {
            $(".sc").click(function(){
                var code = $(this).attr("bs");  //获取主键值
                $.ajax({
                    
                    url:"Delete.php",
                    data:{code:code},  
                    type:"POST",
                    dataType:"TEXT",
                    success: function(data){
                        
                        if(data.trim()=="OK")
                        {
                            //删除成功后再执行一遍显示全部信息与绑定删除事件的方法,这样就不用刷新页面了
                            ShowAll();
                            Bindsc();       //调用自身方法,因为是在点击删除的时候才执行,所以不会无限循环
                        }
                        else
                        {
                            alert( "删除失败!");    
                        }
                        
                        }                
                    
                    });            
                })    
        }    
    
    function ShowAll()  //显示全部信息
    {
        $.ajax({
            async:false,     //AJAX必须同步,显示完信息再绑定删除事件
            url:"ChuLi.php",
            dataType:"TEXT",   //AJAX返回的数据类型是"TEXT"就必须返回字符串
            success: function(data){
                var str = "<tr><td>代号</td><td>姓名</td><td>性别</td><td>民族</td><td>生日</td><td>操作</td></tr>";
                //将返回的字符串拆分成数组
                var hang = data.split("|"); 
                    for(var i=0;i<hang.length;i++)
                    {
                        var lie = hang[i].split("^");    
                        /*str+="<tr><td>"+lie[0]+"</td><td>"+lie[1]+"</td><td>"+lie[2]+"</td><td>"+lie[3]+
                        "</td><td>"+lie[4]+"</td><td></td></tr>";*/
                        //字符串太长,显得很乱,像这种列数比较多的可以嵌套循环
                        str+="<tr>";
                        for(var j=0;j<lie.length;j++)
                        {
                            str+="<td>"+lie[j]+"</td>";    
                        }
                        str+="<td><div class=‘sc‘ bs=‘"+lie[0]+"‘>删除</div></td>";  //添加的bs属性存储主键值
                        str+="</tr>";
                    }
                    $("#xianshi").html(str);
                    
                }    
            
            });        
    }    
    
});
</script>

显示信息处理页面:

<?php
include("../DB.class.php");
$db = new DB();
$sql = "select * from Info";
$attr = $db->Query($sql);
/*返回二维数组,因为返回数据类型是"TEXT",所以要将二维数组变为字符串,二维数组格式如下:
p001 张三
p002 李四
p003 王五

将列之间用"^"拼接,行之间用"|"拼接,格式如下:

echo "p001^张三|p002^李四|p003^王五";*/

$str="";  //先定义字符串,后面要用
foreach($attr as $v)
{
    $str =$str.implode("^",$v);    //每一列之间用"^"拼接
    $str = $str."|";            //循环完一行后面加上"|"
}
$str = substr($str,0,strlen($str)-1);  //将最后面的"|"截掉
echo $str;

//调用AJAX返回字符串的方法
echo $db->StrQuery($sql);

删除事件处理页面:

<?php
$code = $_POST["code"];
include("../DB.class.php");
$db = new DB();
$sql = "delete from Info where Code = ‘{$code}‘";

$r = $db->Query($sql,1);
if($r)
{
    echo "OK";    
}
else
{
    echo "NO";    
}

注意:本例中删除事件用的是div,当然也可以用<a></a>、button等,但因为要删除数据,所以需要主键值,这就要求div中要存储主键值,所以在div中自定义一个属性bs用来存储主键值。

技术分享

 

 注意:有些方法调用自身会无限循环,例如:

<script type="text/javascript">
function Test()
    {
        alert("aa");    
        Test();
    }

</script>

本例中调用自身方法,因为是在点击删除的时候才执行,所以不会无限循环

调用AJAX返回字符串的方法封装到数据库类里面:

//AJAX调用返回字符串
    //用聚合函数时返回字符串比较方便
    public function StrQuery($sql,$type=0,$db="mydb")
    {
        //1.造连接对象
        $conn = new MySQLi($this->host,$this->uid,$this->pwd,$db);
        //2.判断连接是否出错    
        !mysqli_connect_error() or die("连接失败!");
        //3.执行SQL语句
        $result=$conn->query($sql);
        //4.判断语句类型
        if($type==0)
        {
            $attr = $result->fetch_all();            //返回二维数组
            $str = "";
            //如果是查询语句,返回字符串
            for($i=0;$i<count($attr);$i++)    
            {
                for($j=0;$j<count($attr[$i]);$j++)    
                {
                    $str=$str.$attr[$i][$j];
                    $str= $str."^";                     //每一列后面拼接"^"
                }
                $str=substr($str,0,strlen($str)-1);  //把最后的"^"截掉
                $str=$str."|";                       //每一行后面拼接"|"
            }
            $str=substr($str,0,strlen($str)-1);      //把最后的"|截掉"
            return $str;                             //返回字符串
            
        }
        else    //如果是其他语句
        {
            if($result)
            {
                echo "OK";    
            }    
            else
            {
                echo "NO";    
            }
        }
    }

在用聚合函数查询时,StrQuery()比较方便,直接输出字符串即可:

<?php
include("../DB.class.php");
$db = new DB();
$sql = "select count(*) from Info where Code = ‘p001‘";
//用Query()方法
$attr = $db->Query($sql);
echo $attr[0][0];
//用StrQuery()方法
echo $db->StrQuery($sql);

数据库类里面可以多封装一些方法,用熟之后可以很方便的根据需要调用相应方法 

 

AJAX的应用

标签:

原文地址:http://www.cnblogs.com/xinghun/p/5517206.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!