1.MVC框架温习 2.Ajax加强 3.搜索建议 4,三级联动 5、刷新分页 6、Ajax局部动态更新数据
MVC框架复习
·admin.php / index.php
定义常量 APP_NAME admin 和 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') or die ('非法访问');
继承父类baseController(用类的方法实例化smarty并配置smarty)
执行xxxAction控制Model执行连接数据库进行数据处理,接收Model返回值,并控制view/smarty显示出Model返回的数据
·xxxModel.class.php
执行sql语句进行增删改查并且return一个数据让controller接收。
·baseController.class.php
调用__construct()构造函数
<?php
//短路算法 (|| 或运算,如果前面为真,后面就不知行;否则执行)
defined("APP_NAME") || die("非法访问");
class baseController{
protected $smarty; //我们先定义类的属性,让他来保存实例化的对象
public function __construct(){
$this->initSmarty();
}
private function initSmarty(){
require ROOT_PATH."plugins/smarty/smarty.class.php";
$this -> smarty = new Smarty();
$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
class baseModel{
private $host;
private $user;
private $pass;
private $dbname;
public function __construct($host,$user,$pass,$dbname){
//将参数保存到对象的属性上
$this->host = $host;
$this->user = $user;
$this->pass = $pass;
$this->dbname = $dbname;
$this->connect();
}
private function connect(){
mysql_connect($this->host,$this->user,$this->pass);
mysql_select_db($this->dbname);
mysql_query("set names utf8");
}
}
Ajax加强
·<script>
function validate(){
//获得ajax XMLHttpRequest对象(由于浏览器兼容性)
var xhr; //理解成打开浏览器
if(window.ActiveXObject){ //这是IE浏览器的
xhr = new ActiveXObject();
}else if(window.XMLHttpRequest){ //这里是火狐浏览器的
xhr = new XMLHttpRequest();
}
//设置属性,调用方法
var username = document.getElementById('username');
//open()方法有3个参数 1,请求的方式;2,请求的url,3,是否为异步请求
var url = "index.php?c=user&a=ajax_check&time="+new Data().getTime()+"&username="+username.value;//这个请求的地址是服务器端的地址
xhr.open("GET",url,true); //打开地址栏
xhr.onreadystatechange = callback; //监视请求的状态的
xhr.send();
function callback(){
if(xhr.readyState ==4){ //表示请求已经完成
if(xhr.status==200){ //表示请求成功
//获得服务器响应的数据
//alert(xhr.responseText);
if(xhr.responseText){
alert("用户名已注册");
}else{
alert("用户名可以使用");
}
}
}
}
}
</script>
搜索建议
·AJAX步骤
1,var xhr;
if(window.ActiveXObject){
xhr = new ActiveXObject('Microsoft.XMLHTTP');
}else if(window.XMLHttpRequest){
xhr = new XMLHttpRequest();
}
2,url='';
3,xhr.open('POST',url,true);
4,xhr.onreadystatechange=callback;
function callback(){
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 *from user where username like '$data%'";
建议div隐藏方法:init(){
document.getElementById('dv').style.display = 'none';
}
三级联动
mysql_connect('localhost','root','');
mysql_select_db("china");
mysql_query("set names utf8");
//获得用户点击的值以及应该显示的表明
$val = $_POST['val'];
$table = $_POST['table'];
if($table == 't_province'){
//查询所有的省
$sql = "select ProName from $table order by ProSort";
$result = mysql_query($sql);
$rows = array();
while($row = mysql_fetch_row($result)){
echo "<option>$row[0]</option>";
}
}else if($table =='t_city'){
//已知 ProName 查询对应的市的名字
$sql = "select CityName from t_city where ProID=(select ProID from t_province where ProName = '$val')";
$result = mysql_query($sql);
$rows = array();
while($row = mysql_fetch_row($result)){
echo "<option>$row[0]</option>";
}
}else if($table =='t_district'){
//已知 CityName 查询对应的县的名字
$sql = "select DisName from t_district where CityID=(select CityID from t_city where CityName = '$val')";
$result = mysql_query($sql);
$rows = array();
while($row = mysql_fetch_row($result)){
echo "<option>$row[0]</option>";
}
}
仍在完善中
刷新分页 ·在controller中显示模板
·在模板中自动加载viewpage(1)函数
·在模板的脚本文件中获取tables内容,每次清空
·实例化xhr = new ActiveXObject(‘Microsoft.XMLHTTP’)、new XMLHttpRequest();
·设置url index.php?c=fenye&a=process
·开启协议传输xhr.open('send',url,true);
·设置POST乱码编正xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
·开启监听并且在响应状态调用回调函数xhr.onreadystatechange = callback;
·开启send send('page='+page);
·判断状态if(xhr.readyState==4){
if(xhr.status==200){
开始处理语句~~ var json = eval('('+xhr.responseText+')');
var result = eval('('+json[1]+')');
document.getElementById('item').innerHTML = json[0];
for(var i=0;i<result.length;i++){
var trs = document.createElement('tr');
for(var j=0;j<7;j++){
var tds = 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 = '<FONT color="red">第'. $page.'页/总'.$pages.'页 | 总'.$total_rows.'条</FONT><a onclick="viewpage('.$first.')" href="#">首页</a>
<a onclick="viewpage('.$prev.')" href="#">上页</a>
<a onclick="viewpage('.$next.')" href="#">下页</a>
<a onclick="viewpage('.$last.')" href="#">尾页</a>';
·调用数据模型的getPage(offset,pagesize)函数
public function getPage($offset,$pagesize){
$sql = "select * from book limit $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标签格式~~~