读书人

1.MVC框架温习 2.Ajax加强 3.搜索建

发布时间: 2013-04-05 10:24:33 作者: rapoo

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


读书人网 >Ajax

热点推荐