zoukankan      html  css  js  c++  java
  • 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标签格式~~~

                 


  • 相关阅读:
    ubuntu 10.04安装增强功能 共享文件夹
    CRF简介入门
    Ant 的build.xml 详解
    eclipse中各种颜色和背景的设置
    第13章 类继承 --抽象基类
    第13章 类继承
    团队开发之绩效考核二
    站立会议
    团队站立会议
    团队开发站立会议
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/2995370.html
Copyright © 2011-2022 走看看