Jquery+Ajax+PHP+MySQL实现分类列表管理(上)


Posted in Javascript onOctober 28, 2015

在实际应用中,我们要管理一个客户分类,实现对客户分类的增加、删除和修改等操作,如何让这些操作变得更人性化,让用户操作起来更加方便成了我们必须研究的课题。

 Jquery+Ajax+PHP+MySQL实现分类列表管理(上)

准备阶段
您需要具备HTML和Jquery等前端知识,以及基本的PHP程序和MySql数据库相关知识。要实现本文中的DEMO示例,首先需要一个mysql数据库:

CREATE TABLE `catalist` ( 
 `cid` int(11) NOT NULL auto_increment, 
 `title` varchar(100) NOT NULL, 
 `sort` mediumint(6) NOT NULL default '0', 
 PRIMARY KEY (`cid`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

其次在页面中引入jquery库,以及操作结果提示插件jNotify和删除确认插件hiAlert。后者两个插件在本站都有详细的讲解,读者可以通过链接了解下:
将需要准备的文件一并加入到index.php的<head>之间。

<script type="text/javascript" src="js/jquery.js"></script> 
<script type="text/javascript" src="js/jNotify.jquery.js"></script> 
<script type="text/javascript" src="js/jquery.alert.js"></script> 
<script type="text/javascript" src="js/global.js"></script> 
<link rel="stylesheet" type="text/css" href="css/alert.css" />

准备完毕我们进入主题。
index.php
index.php是主体页面,读取了数据库中的分类数据,以列表展示,并提供了增加、删除和修改的功能按钮。

<?php 
include_once('connect.php'); //连接数据库 
$query = mysql_query("select * from catalist order by cid asc"); 
while($row=mysql_fetch_array($query)){ 
 $list .= "<li rel='".$row['cid']."'><span class='del' title='删除'></span> 
 <span class='edit' title='编辑'></span><span class='txt'>".$row['title']."</span></li>"; 
} 
?>

以上代码通过读取数据表中的数据,返回一个列表字符串。然后我们要将字符串输出到对应的列表中,代码如下:

<div class="selectlist"> 
 <h3>客户类别</h3> 
 <ul id="catalist"> 
   <?php echo $list;?> 
 </ul> 
 <p><a href="javascript:;" onclick="addOpt()">新增一项</a></p> 
</div>

试着往数据表中添加几条数据,可以看到一个分类列表。
CSS

.input{width:160px; padding:2px; border:1px solid #d3d3d3} 
.cur_tr{background:#ffc} 
.selectlist{width:280px; margin:30px auto; border:1px solid #ccc;} 
.selectlist h3{height:32px; line-height:32px; padding:0 4px; border-bottom:1px dotted #d3d3d3; 
 background:#f7f7f7} 
.selectlist h3 span{float:right; font-weight:500} 
.selectlist ul{margin-top:4px; margin-left:20px; list-style-type: disc} 
.selectlist ul li{line-height:26px} 
.selectlist p{line-height:28px; padding-left:6px} 
.selectlist ul li span{width:20px; height:20px} 
.selectlist ul li span.edit{ float:right;background:url(images/edits.gif) no-repeat 0 5px; 
cursor:pointer} 
.selectlist ul li span.del,.selectlist ul li span.dels,.selectlist ul li span.cancer{ 
 float:right;background:url(images/del.gif) no-repeat 0 5px; cursor:pointer} 
.selectlist ul li span.ok,.selectlist ul li span.oks{float:right;background:url(images/ok.gif) 
no-repeat 0 5px; cursor:pointer}

CSS我就不详细讲解,看下就明白了,最终显示的效果如图:

Jquery+Ajax+PHP+MySQL实现分类列表管理(上)

新增项操作
在global.js加入addOpt()函数:

function addOpt(){ 
 var str = "<li><span class='dels' title='取消'></span><span class='ok' title='保存'></span> 
 <input type='text' class='input' /></li>"; 
 $("#catalist").append(str); 
}

通过单击“新增一项”链接,向DOM中添加了一个新增项的输入框。
当用户输入内容后,点击“保存”,将会触发一个ajax操作,先看代码:

$(function(){ 
 //保存新增项 
 $(".ok").live('click',function(){ 
  var btn = $(this); 
  var input_str = btn.parent().find('input').val(); 
  if(input_str==""){ 
   jNotify("请输入类别!"); 
   return false; 
  } 
  var str = escape(input_str); 
  $.getJSON("post.php?action=add&title="+str,function(json){ 
   if(json.success==1){ 
    var li = "<li rel='"+json.id+"'><span class='del' title='删除'> 
    </span><span class='edit' title='编辑'></span><span class='txt'>"+ 
    json.title+"</span></li>"; 
    $("#catalist").append(li); 
    btn.parent().remove(); 
    jSuccess("恭喜,操作成功!"); 
   }else{ 
    jNotify("出错了!"); 
    return false; 
   } 
  }); 
 }); 
});

首先获取用户输入的内容,如果没有输入任何内容则提示用户输入内容,然后将用户输入的内容进行escape编码,保证中文字符能正确传输给后台程序识别。然后通过$.getJSON方法向后台post.php发起一个异步的Ajax请求。后台post.php接收参数值并进行相关处理,前端代码通过响应后台返回的JSON数据,如果新增成功,则向列表后面追加一项,并提示用户“操作成功”,如果失败则提示用户“出错了”。
如果要取消新增项操作,只需当单击“取消”按钮时执行以下代码:

//取消新增项 
$(".dels").live('click',function(){ 
  $(this).parent().remove(); //将新增项移除 
});

后台post.php需要处理新增项内容,代码如下:

include_once('connect.php'); //连接数据库 
$action = $_GET['action']; 
switch($action){ 
 case 'add': //新增项 
  $title = uniDecode($_GET['title'],'utf-8'); 
  $title = htmlspecialchars($title,ENT_QUOTES); 
  $query = mysql_query("insert into catalist (cid,title) values (NULL,'$title')"); 
  if($query){ 
   $insertid = mysql_insert_id($link); 
   $arr = array('id'=>$insertid,'title'=>$title,'success'=>1); 
  }else{ 
   $arr = array('success'=>2); 
  } 
  echo json_encode($arr); 
  break; 
  case '': 
  break; 
}

通过接收前端提交的内容,进行解码后,写入数据表中,并输出JSON数据格式供前台处理。关于uniDecode()函数,读者可以下载源码了解,主要是为了正确读取解析jquery通过异步提交的中文字符串。
添加项操作已经完成,下面请看删除项操作。删除项操作
回到global.js,在$(function(){})加入下面的代码:

//删除项 
 $(".del").live('click',function(){ 
  var btn = $(this); 
  var id = btn.parent().attr('rel'); 
  var URL = "post.php?action=del"; 
  hiConfirm('您确定要删除吗?', '提示',function(r){ 
   if(r){ 
    $.ajax({ 
    type: "POST", 
    url: URL, 
    data: "id="+id, 
    success: function(msg){ 
     if(msg==1){ 
      jSuccess("删除成功!"); 
      btn.parent().remove(); 
     }else{ 
      jNotify("操作失败!"); 
      return false; 
     } 
    } 
    }); 
   } 
  }); 
 });

显然,通过单击“删除”按钮,同样是向后台post.php发送一个ajax请求,将删除项对应的参数ID发送给后台并响应后台处理结果,如果成功,则提示用户“删除成功”,并通过remove()将数据项移除,如果失败,则提示“操作失败”。
后台post.php接收参数并作出相应的处理:

case 'del': //删除项 
 $id = $_POST['id']; 
 $query = mysql_query("delete from catalist where cid=".$id); 
 if($query){ 
  echo '1'; 
 }else{ 
  echo '2'; 
 } 
 break;

以上这段代码片段,加在post.php的switch语句中,执行了删除语句,并输出执行结果供前端处理。
限于篇幅,修改项操作在下此文章中再进行讲解,敬请关注,不要错过喽。

Javascript 相关文章推荐
对textarea框的代码调试,而且功能上使用非常方便,酷
Jun 30 Javascript
一些常用且实用的原生JavaScript函数
Sep 08 Javascript
javascript删除数组重复元素的方法汇总
Jun 24 Javascript
js+css实现回到顶部按钮(back to top)
Mar 02 Javascript
如何高效率去掉js数组中的重复项
Apr 12 Javascript
jQuery插件ajaxfileupload.js实现上传文件
Oct 23 Javascript
Angular 应用技巧总结
Sep 14 Javascript
通俗易懂地解释JS中的闭包
Oct 23 Javascript
opencv 识别微信登录验证滑动块位置
Aug 07 Javascript
js异步上传多张图片插件的使用方法
Oct 22 Javascript
jQuery删除/清空指定元素的所有子节点实例代码
Jul 04 jQuery
Javascript 模拟mvc实现点餐程序案例详解
Dec 24 Javascript
自己动手写的jquery分页控件(非常简单实用)
Oct 28 #Javascript
Jquery日历插件制作简单日历
Oct 28 #Javascript
使用CoffeeScrip优美方式编写javascript代码
Oct 28 #Javascript
开启Javascript中apply、call、bind的用法之旅模式
Oct 28 #Javascript
JavaScript多并发问题如何处理
Oct 28 #Javascript
JS实现双击屏幕滚动效果代码
Oct 28 #Javascript
基于JavaScript如何实现私有成员的语法特征及私有成员的实现方式
Oct 28 #Javascript
You might like
PHP怎样调用MSSQL的存储过程
2006/10/09 PHP
php4的彩蛋
2006/10/09 PHP
php数组函数序列之array_pop() - 删除数组中的最后一个元素
2011/11/07 PHP
is_uploaded_file函数引发的不能上传文件问题
2013/10/29 PHP
php获取一定范围内取N个不重复的随机数
2016/05/28 PHP
ThinkPHP中图片按比例切割的代码实例
2019/03/08 PHP
JQuery中each()的使用方法说明
2010/08/19 Javascript
原生js实现给指定元素的后面追加内容
2013/04/10 Javascript
关于ExtJS4.1:快捷键支持的问题
2013/04/24 Javascript
多次注册事件会导致一个事件被触发多次的解决方法
2013/08/12 Javascript
浅析JavaScript中的CSS属性及命名规范
2013/11/28 Javascript
js数字转换为float,取N位小数
2014/02/08 Javascript
JS常见简单正则表达式验证功能小结【手机,地址,企业税号,金额,身份证等】
2017/01/22 Javascript
JavaScript实现二分查找实例代码
2017/02/22 Javascript
Angular 2 ngForm中的ngModel、[ngModel]和[(ngModel)]的写法
2017/06/29 Javascript
浅谈mint-ui loadmore组件注意的问题
2017/11/08 Javascript
浅谈Vue-cli 命令行工具分析
2017/11/22 Javascript
Node.js 使用request模块下载文件的实例
2018/09/05 Javascript
angular 用Observable实现异步调用的方法
2018/12/27 Javascript
js序列化和反序列化的使用讲解
2019/01/19 Javascript
javascript实现滚动条效果
2020/03/24 Javascript
Python爬虫框架Scrapy安装使用步骤
2014/04/01 Python
python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)
2019/05/30 Python
浅谈pyqt5在QMainWindow中布局的问题
2019/06/21 Python
Django 反向生成url实例详解
2019/07/30 Python
基于Python2、Python3中reload()的不同用法介绍
2019/08/12 Python
Win 10下Anaconda虚拟环境的教程
2020/05/18 Python
正宗的澳大利亚Ugg靴子零售商:UGG Express
2020/04/19 全球购物
出纳岗位职责范本
2013/12/01 职场文书
学生社团文化节开幕式主持词
2014/03/28 职场文书
公司试用期员工自我评价
2014/09/17 职场文书
清明节随笔
2015/08/15 职场文书
2016简单的租房合同范本
2016/03/18 职场文书
Go语言操作数据库及其常规操作的示例代码
2021/04/21 Golang
15个值得收藏的JavaScript函数
2021/09/15 Javascript
MySQL的索引你了解吗
2022/03/13 MySQL