1.MVC框架复习 2.Ajax加强 3.搜索建议 4,三级联动 5、刷新分页
MVC框架复习 ·admin.php/index.php 定义常量APP_NAMEadmin和home来区分入口。 define('APP_NAME','admin/'); require('init.php'); ·init.php 定义ROOT_PATH常量,调用str_replace('','',''); 用isset判断获得参数,当参数不为空时,参数为空入口分别为admin、index时分别定义类名,进入相应的xxxController.class.php 同时判断Action参数并进入相应的xxxAction()函数执行命令 调用__autoload()自动加载函数接受参数$class_name, 调用strpos判断类名所包含的的是控制类还是模型类或者smarty类并逐步加载各文件。 ·xxxController.class.php 短路算法:defined('APP_NAME')ordie('非法访问'); 继承父类baseController(用类的方法实例化smarty并配置smarty) 执行xxxAction控制Model执行连接数据库进行数据处理,接收Model返回值,并控制view/smarty显示出Model返回的数据 ·xxxModel.class.php 执行sql语句进行增删改查并且return一个数据让controller接收。 ·baseController.class.php 调用__construct()构造函数 <?php //短路算法(||或运算,如果前面为真,后面就不知行;否则执行) defined("APP_NAME")||die("非法访问"); classbaseController{ protected$smarty;//我们先定义类的属性,让他来保存实例化的对象 publicfunction__construct(){ $this->initSmarty(); } privatefunctioninitSmarty(){ requireROOT_PATH."plugins/smarty/smarty.class.php"; $this->smarty=newSmarty(); $this->smarty->template_dir=ROOT_PATH."views/".APP_NAME; $this->smarty->compile_dir=ROOT_PATH."data/template_c"; $this->smarty->left_delimiter="<{"; $this->smarty->right_delimiter="}>"; } } ·baseModel.class.php <?php classbaseModel{ private$host; private$user; private$pass; private$dbname; publicfunction__construct($host,$user,$pass,$dbname){ //将参数保存到对象的属性上 $this->host=$host; $this->user=$user; $this->pass=$pass; $this->dbname=$dbname; $this->connect(); } privatefunctionconnect(){ mysql_connect($this->host,$this->user,$this->pass); mysql_select_db($this->dbname); mysql_query("setnamesutf8"); } } Ajax加强 ·<script> functionvalidate(){ //获得ajaxXMLHttpRequest对象(由于浏览器兼容性) varxhr;//理解成打开浏览器 if(window.ActiveXObject){//这是IE浏览器的 xhr=newActiveXObject(); }elseif(window.XMLHttpRequest){//这里是火狐浏览器的 xhr=newXMLHttpRequest(); } //设置属性,调用方法 varusername=document.getElementById('username'); //open()方法有3个参数1,请求的方式;2,请求的url,3,是否为异步请求 varurl="index.php?c=user&a=ajax_check&time="+newData().getTime()+"&username="+username.value;//这个请求的地址是服务器端的地址 xhr.open("GET",url,true);//打开地址栏 xhr.onreadystatechange=callback;//监视请求的状态的 xhr.send(); functioncallback(){ if(xhr.readyState==4){//表示请求已经完成 if(xhr.status==200){//表示请求成功 //获得服务器响应的数据 //alert(xhr.responseText); if(xhr.responseText){ alert("用户名已注册"); }else{ alert("用户名可以使用"); } } } } } </script> 搜索建议 ·AJAX步骤 1,varxhr; if(window.ActiveXObject){ xhr=newActiveXObject('Microsoft.XMLHTTP'); }elseif(window.XMLHttpRequest){ xhr=newXMLHttpRequest(); } 2,url=''; 3,xhr.open('POST',true); 4,xhr.onreadystatechange=callback; functioncallback(){ if(xhr.readyState==4){ if(xhr.status==200){ 获取xhr.responseText; } } } 5,xhr.send('一个值'); ·显示详细信息在标签中调用onmouSEOver=‘showDetail(《{$value.user_id}》)’方法 send()POST方式时屏蔽乱码语句:xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); php中json_encode();方法将数组转化成json格式的字符串,Js中eval('('+转化过来的字符串+')');来将字符串转化成json对象 ·百度词条搜索建议:$sql="select*fromuserwhereusernamelike'$data%'"; 建议div隐藏方法:init(){ document.getElementById('dv').style.display='none'; } 三级联动 mysql_connect('localhost','root',''); mysql_select_db("china"); mysql_query("setnamesutf8"); //获得用户点击的值以及应该显示的表明 $val=$_POST['val']; $table=$_POST['table']; if($table=='t_province'){ //查询所有的省 $sql="selectProNamefrom$tableorderbyProSort"; $result=mysql_query($sql); $rows=array(); while($row=mysql_fetch_row($result)){ echo"<option>$row[0]</option>"; } }elseif($table=='t_city'){ //已知ProName查询对应的市的名字 $sql="selectCityNamefromt_citywhereProID=(selectProIDfromt_provincewhereProName='$val')"; $result=mysql_query($sql); $rows=array(); while($row=mysql_fetch_row($result)){ echo"<option>$row[0]</option>"; } }elseif($table=='t_district'){ //已知CityName查询对应的县的名字 $sql="selectDisNamefromt_districtwhereCityID=(selectCityIDfromt_citywhereCityName='$val')"; $result=mysql_query($sql); $rows=array(); while($row=mysql_fetch_row($result)){ echo"<option>$row[0]</option>"; } } 仍在完善中 刷新分页·在controller中显示模板 ·在模板中自动加载viewpage(1)函数 ·在模板的脚本文件中获取tables内容,每次清空 ·实例化xhr=newActiveXObject(‘Microsoft.XMLHTTP’)、newXMLHttpRequest(); ·设置urlindex.php?c=fenye&a=process ·开启协议传输xhr.open('send',true); ·设置POST乱码编正xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); ·开启监听并且在响应状态调用回调函数xhr.onreadystatechange=callback; ·开启sendsend('page='+page); ·判断状态if(xhr.readyState==4){ if(xhr.status==200){ 开始处理语句~~varjson=eval('('+xhr.responseText+')'); varresult=eval('('+json[1]+')'); document.getElementById('item').innerHTML=json[0]; for(vari=0;i<result.length;i++){ vartrs=document.createElement('tr'); for(varj=0;j<7;j++){ vartds=document.createElement('td'); tds.innerHTML=result[i][j]; document.getElementById('tables').appendChild(trs); trs.appendChild(tds); } } ·controller接收并且调用processAction函数 ·在函数中接收page参数 连接数据库 设置pagesize 在数据库调用getTotal()函数,处理数据返回总条数totalrows 求出总页数pages=ceil(totalrows除以pagesize) 求出偏移量offset=pagesize乘以page-1 设置首页first=1前一页prev=page-1设置prev》0 下一页next=page+1判断if($next<$pages){ $next=$page+1; }else{ $next=$pages; } $last=$pages; 输出字符串 $str='<FONTcolor="red">第'.$page.'页/总'.$pages.'页|总'.$total_rows.'条</FONT><aonclick="viewpage('.$first.')"href="#">首页</a> <aonclick="viewpage('.$prev.')"href="#">上页</a> <aonclick="viewpage('.$next.')"href="#">下页</a> <aonclick="viewpage('.$last.')"href="#">尾页</a>';
·调用数据模型的getPage(offset,pagesize)函数 publicfunctiongetPage($offset,$pagesize){ $sql="select*frombooklimit$offset,$pagesize"; $result=mysql_query($sql); $rows=array(); while($row=mysql_fetch_array($result)){ $rows[]=$row; } return$rows; } ·在controller中接收数据调用json_encode()转化接收的数组成json格式的字符串 将str和json_encode(pageInfo)放入一个数组 并且将这个数组调用json_code函数转化成字符串 ·在模板脚本接收eval(‘(’+xhr.responseText+‘)’) 并运用DOM方法给模板赋值~ Ajax局部动态更新数据 调用responseXML的时候注意网页编码要使用unicode无DOM标签格式~~~ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |