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判断获得参数,当参数不为空时,参数为空入口分别为adminindex时 分别定义类名,进入相应的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,请求的url3,是否为异步请求

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');

  phpjson_encode();方法将数组转化成json格式的字符串,Jseval'('+转化过来的字符串+')');来将字符串转化成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中显示模板

·在模板中自动加载viewpage1)函数

·在模板的脚本文件中获取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= ceiltotalrows除以pagesize

  求出偏移量 offset=pagesize乘以page-1

  设置首页first=1 前一页 prev=page-1 设置prev0

  下一页 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>';

   

·调用数据模型的getPageoffsetpagesize)函数

  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标签格式~~~

             


原文地址:https://www.cnblogs.com/xinyuyuanm/p/2995370.html