首页 > 编程技术 > php

ThinkAjax中异步传输技术实现代码

发布时间:2016-11-25 17:10

本实例介绍了在利用thinkajax中的无刷新技术来实例异步传输,有需要的朋友可以参考一下。

ThinkPHP的官方文档没有给出ThinkAjax的使用方法,令很多初学者使用起来有些不便,今天学到这里,也碰到了很多问题,花时间深究下,做个学习笔记,希望能对初学者有帮助。

 代码如下 复制代码

<script type="text/javascript"" width=100% src="__PUBLIC__/js/base.js"></script>

<script type="text/javascript"" width=100% src="__PUBLIC__/js/prototype.js"></script>

<script type="text/javascript"" width=100% src="__PUBLIC__/js/mootools.js"></script>

<script type="text/javascript"" width=100% src="__PUBLIC__/js/Ajax/ThinkAjax.js"></script>

<script type="text/javascript">

function checktitle()

{

       ThinkAjax.send('__URL__/checktitle','ajax=1&title='+$('title').value,'','checkbox');

}

</script>

<form action="__URL__/insert" method="post" id="myform">

 <table>

     <tbody>

     <tr>

        <td width="45" class="tRight">标题:</td>

        <td>

        <input type="text" id="title" name="title">

        <input type="button" value="检查" onClick="checktitle();">         

        </td>

        <td>

        <span id="checkbox"></span>

        </td>

     </tr>                 

      </tbody>

 </table>

</form>

代码解释:

 为“检查”按钮添加一个onclick事件,当按钮被点击时,调用checktitle()函数
 在checktitle函数中,我们只用到了ThinkAjax对象中的成员方法send
    send:function(url,pars,response,target,tips,effect){……}

可以看出ThinkAjax.send方法共有6个参数:

参数url:表示要将客户端浏览器传输过来的数据提交到服务器上的哪个方法进行处理,我这里提交给“当前模块下的checktitle方法”处理

参数pars:相当于ajax中的send方法中的参数string,表示要提交过去的数据,该参数只用于post方式传值

参数response:自定义的回调函数,如果定义了回调函数,则服务器处理完提交过去的数据之后,将会把处理后的数据交给回调函数进行处理。该回调函数有两个参数:①data②status  参数data:将服务器端处理后的数据赋给data 参数status:表示处理后的状态信息,1表示成功 0 表示失败

参数target:表示将处理后的数据在哪个地方进行显示(或输出),比如:我将此参数赋为:checkbox,表示处理后的数据会在id=”checkbox”的标签进行信息输出

 

当前模块下的checktitle方法的源代码:

 代码如下 复制代码

<?php
class IndexAction extends Action
{
       // 首页
       public function index(){
              $this->display();
       }
       // 检查标题是否可用
       public function checkTitle()
       {
              if(!empty($_POST['title']))
                     {
                     $Form     =     D("Form");
                     if($Form->getByTitle($_POST['title']))
                     {
                            $this->error('标题已经存在');
                     }
                     else
                     {
                            $this->success('标题可以使用!');
                     }
              }
              else
              {
                     $this->error('标题不能为空...');
              }
       }
}
?>

本文章详细的介绍了关于在php中的文件调用测试包括了include(), require() ,include_once(),require_once()等多种交换调用,有需要的朋友可以参考一下。


7.3.1 Include的使用,可以包含相同的文件多次

 代码如下 复制代码

<?php

include 'demo1.php';

include 'demo1.php';

include 'demo1.php';

?>

 

输出结果如

 代码如下 复制代码

e10adc3949ba59abbe56e057f20f883e
7c4a8d09ca3762af61e59520943dc26494f8941b
3.14159265359


--------------------------------------------------------------------------------

e10adc3949ba59abbe56e057f20f883e
7c4a8d09ca3762af61e59520943dc26494f8941b
3.14159265359


--------------------------------------------------------------------------------

e10adc3949ba59abbe56e057f20f883e
7c4a8d09ca3762af61e59520943dc26494f8941b
3.14159265359
 

 

7.3.2 include_once使用上和include没什么区别,但是调用多次只会包含相同的文件一次

 

 代码如下 复制代码

 

<?php

include_once 'demo1.php';

include_once 'demo1.php';

include_once 'demo1.php';

?>

 

结果如下

 代码如下 复制代码
e10adc3949ba59abbe56e057f20f883e
7c4a8d09ca3762af61e59520943dc26494f8941b
3.14159265359
 

 

7.3.3 require() 语句包含并运行指定文件。

 代码如下 复制代码

<?php

require 'demo1.php';

require 'demo1.php';

require 'demo1.php';

?>
 

结果如下

 代码如下 复制代码

e10adc3949ba59abbe56e057f20f883e
7c4a8d09ca3762af61e59520943dc26494f8941b
3.14159265359


--------------------------------------------------------------------------------

e10adc3949ba59abbe56e057f20f883e
7c4a8d09ca3762af61e59520943dc26494f8941b
3.14159265359


--------------------------------------------------------------------------------

e10adc3949ba59abbe56e057f20f883e
7c4a8d09ca3762af61e59520943dc26494f8941b
3.14159265359
 

 

7.3.4 require_once() 语句在脚本执行期间包含并运行指定文件.但是不重复包含相同的文件。

 代码如下 复制代码

<?php

require_once 'demo1.php';

require_once 'demo1.php';

require_once 'demo1.php';

?>

 

输出结果如下

 代码如下 复制代码
e10adc3949ba59abbe56e057f20f883e
7c4a8d09ca3762af61e59520943dc26494f8941b
3.14159265359s
 

 

7.3.5 include与require的区别

Include后面如果还有其他代码,当调用include出错时,后面的代码还会继续执行,但是require则不会。

 

Include在调用一个不存在的文件时,会给出警告,但是会继续执行后面的代码。

 代码如下 复制代码

<?php

include 'demo111.php';

 

echo('this is demo13.php');

?>
 

输出结果如下

 

 代码如下 复制代码

Warning: include(demo111.php) [function.include]: failed to open stream: No such file or directory in D:AppServwwwBasic7demo13.php on line 2

Warning: include() [function.include]: Failed opening 'demo111.php' for inclusion (include_path='.;C:php5pear') in D:AppServwwwBasic7demo13.php on line 2
this is demo13.php

 

Require在调用一个不存在的文件时,会给出一个错误,并中止代码的执行。

 代码如下 复制代码

<?php

require 'demo111.php';

 

echo('this is demo14.php');

?>
 

输出结果如下

 

 代码如下 复制代码

Warning: require(demo111.php) [function.require]: failed to open stream: No such file or directory in D:AppServwwwBasic7demo14.php on line 2

Fatal error: require() [function.require]: Failed opening required 'demo111.php' (include_path='.;C:php5pear') in D:AppServwwwBasic7demo14.php on line 2

本函数的作 用判断是否为合法邮编(固定长度),方法很简单就是用正则来操作。
 代码如下 复制代码


< ?php

// 函数名:CheckPost($C_post)

// 作 用:判断是否为合法邮编(固定长度)

// 参 数:$C_post(待check的邮政编码)

// 返回值:布尔值

// 备 注:无

//-----------------------------------------------------------------------------------

 

 

function CheckPost($C_post)

{

$C_post=trim($C_post);

if (strlen($C_post) == 6)

{

if(!ereg("^[+]?[_0-9]*$",$C_post))

{

return true;;

}else

{

return false;

}

}else

{

return false;;

}

}

?>

文章详细的介绍了关于PHP中print_r、var_export、var_dump区别比较以及这几个在php不同的应用中的用法,有需要的朋友可以参考一下

可以看出print_r跟var_export都是可以作为返回值的,只需要把第二个参数设置为true即可

print_r
(PHP 4 , PHP 5)print_r –  打印关于变量的易于理解的信息。

描述
bool print_r ( mixed expression [, bool return])

注: 参数 return 是在 PHP 4.3.0 的时候加上的

print_r() 显示关于一个变量的易于理解的信息。如果给出的是 string、integer 或 float,将打印变量值本身。如果给出的是 array,将会按照一定格式显示键和元素。object 与数组类似。

记住,print_r() 将把数组的指针移到最后边。使用 reset() 可让指针回到开始处。

 

 代码如下 复制代码

<pre>
<?php
$a = array ('a' => 'apple', 'b' => 'banana', 'c' => array ('x','y','z'));
print_r ($a);
?>
</pre> 

上边的代码将输出:

 代码如下 复制代码

<pre>
Array
(
    [a] => apple
    [b] => banana
    [c] => Array
        (
            [0] => x
            [1] => y
            [2] => z
        )
)
</pre>

 

如果想捕捉 print_r() 的输出,可使用 return 参数。若此参数设为 TRUE,print_r() 将不打印结果(此为默认动作),而是返回其输出。

 

例子 1. return 参数示例

 代码如下 复制代码

<?php
$b = array ('m' => 'monkey', 'foo' => 'bar', 'x' => array ('x', 'y', 'z'));
$results = print_r ($b, true); //$results 包含了 print_r 的输出结果
?> 
 

 

注: 如果想在 PHP 4.3.0 之前的版本中捕捉 print_r() 的输出,可使用输出控制函数。

注: 在 PHP 4.0.4 之前的版本中,如果给出的 array 或 object 包含了直接或间接指向自身的引用,print_r() 将永远继续下去。print_r($GLOBALS) 就是一个例子,因为 $GLOBALS 自身即是全局变量,其包含了指向自身的引用。

 

var_export
(PHP 4 >= 4.2.0, PHP 5)var_export – 输出或返回一个变量的字符串表示

描述
mixed var_export ( mixed expression [, bool return])

此函数返回关于传递给该函数的变量的结构信息,它和 var_dump() 类似,不同的是其返回的表示是合法的 PHP 代码。

您可以通过将函数的第二个参数设置为 TRUE,从而返回变量的表示。

比较 var_export() 和 var_dump().

 

 代码如下 复制代码

<pre>
<?php
$a = array (1, 2, array ("a", "b", "c"));
var_export ($a); /* 输出:
array (
0 => 1,
1 => 2,
2 =>
array (
0 => 'a',
1 => 'b',
2 => 'c',
),
)
*/

$b = 3.1;
$v = var_export($b, TRUE);
echo $v;

/* 输出:
3.1
*/
?>
</pre>


 

  var_dump
(PHP 3>= 3.0.5, PHP 4 , PHP 5)var_dump – 打印变量的相关信息

描述
void var_dump ( mixed expression [, mixed expression [, ...]])

此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。

提示: 为了防止程序直接将结果输出到浏览器,您可以使用输出控制函数(output-control functions)来捕获函数的输出,并把它们保存到一个 string 型的变量中。

可以比较一下 var_dump() 与 print_r()。

 

例子 1. var_dump() 示例

 代码如下 复制代码

<pre>
<?php
$a = array (1, 2, array ("a", "b", "c"));
var_dump ($a); /* 输出:
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
array(3) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[2]=>
string(1) "c"
}
}*/

 

$b = 3.1;
$c = TRUE;
var_dump($b,$c);

/* 输出:
float(3.1)
bool(true)*/

?>
</pre>

 
 
 

* 在新建对象时需要的变量:$query(从数据表中获取记录数的sql语句),$page(当前页码),$maxline(每页几行)) * 1、showpage方法:如果上面创建对象的$query正确,直接调用,即可输出分页信息 * 2、showtable方法:需要的变量:$query(从数据库读取记录的SQL语句,不要加Limit,因为在方法中已经添加)
 代码如下 复制代码

<?php
/*
 * 直接输出数据表和分页信息
 * 在新建对象时需要的变量:$query(从数据表中获取记录数的sql语句),$page(当前页码),$maxline(每页几行))
 * 1、showpage方法:如果上面创建对象的$query正确,直接调用,即可输出分页信息
 * 2、showtable方法:需要的变量:$query(从数据库读取记录的SQL语句,不要加Limit,因为在方法中已经添加)
 *   直接输出<tr><td></td></tr>的表格,所以只需在前后加上<table></table>就是完整的表格
 * 3、showresult方法:根据提交的$query中的SQL,直接将$result资源返回,表格可以自己定义
 * 示例:
//获取当前页,并定义每页最大行
$page=1;
$maxline="10";
if(!empty($_GET["page"])){
 $page=$_GET["page"];
}
//定义计算表内数据总数的SQL语句,这里必须和下面的$query是同一个表和条件,创建对象,输出页码和表格
$query="select count(*) from mailbox";
$a=new PageList($query, $maxline, $page);
$a->showpage();
//这里显示列表,需要和上面的SQL语句一样的条件
$query="select username,name,quota,created,modified,active from mailbox order by created desc";
echo "<table width='800' border='0' cellspacing='0' cellpadding='0' class='pagelist'>";
$a->showtable($query);
echo "</table>";
 * */

class PageList{
 private $link;
 private $result;
 private $maxline;
 private $page=1; 
 private $startline=0;
 private $countline;
 public  $countpage;
 private $prevpage;
 private $nextpage;
 //数据库联接,需要修改为您自己的地址
 private $dbhost=DBHOST;
 private $dbuser=DBUSER;
 private $dbpasswd=DBPASSWD;
 private $dbtable=DBTABLE;

/*
 * 构造函数中建立数据库联接
 * 1、数据库连接的4个参数设置为常量 记录在config.php页面中
 * 2、连接数据库,并选择数据库
 * 3、设置数据库执行的编码方式为utf8
 * 4、将接收到的$maxline,$page两个变量赋值给类属性,成为该类通用属性
 *   (其中$query是count(*)的SQL,和下面方法中的query是不一样的)
 * 5、根据新建对象时递交的$query语句,对数据库执行查询,将得到的总记录数赋值到类属性中$this->countline
 *   将总记录数/每页行数,再用ceil函数高位取整,得到总页数并赋值到类属性中$this->countpage
 * 6、根据递交的当前页码$page,算出前后页的数字$this->prevpage和$this->nextpage
 *  还有必须算出数据库读取的起始行$this->startline
 *  这里分3种情况,page<2 ,page=最后一页,page>1(这个情况可以不判断,直接用else)  
 * */
 public function __construct($query,$maxline,$page){
  @$this->link=mysql_connect($dbhost,$dbuser,$dbpasswd) or die($this->feedback='System Error ,Please contect admin');
  @mysql_select_db($dbtable,$this->link) or die($this->feedback='System Error ,Please contect admin');
  @mysql_query('set names utf8');
  $this->maxline=$maxline;
  
  //读取行数,并将结果返回$coutline
  $this->result=mysql_query($query) or die($this->feedback='System Error ,Please contect admin');
  if($count=mysql_fetch_row($this->result)){
   //intval将字符串转为int,可以不转,但这样的程序更健康
   $this->countline = intval($count[0]);
   $this->countpage = ceil($this->countline/$maxline);
  }
  //判断递交的$page是否大于总页数
  if($page<=$this->countpage){
   $this->page=$page;
  }
  
  if($this->page<2){
   $this->prevpage=0;
   $this->nextpage=2;
   $this->startline= 0;
  }elseif($this->page==$this->countpage){
   $this->prevpage=$this->page-1;
   $this->nextpage=0;
   $this->startline= ($this->page-1)*$this->maxline;
  }else{
   $this->prevpage=$this->page-1;
   $this->nextpage=$this->page+1;
   $this->startline= ($this->page-1)*$this->maxline;
  }
 }

/*
 * 析构函数
 * 释放资源,关闭数据库连接
 * */
 public function __destruct(){
  mysql_free_result($this->result);
  mysql_close($this->link);
  exit();
 }
 
/*
 * 输出分页信息
 * */
 public function showpage(){
  //$listnum显示上下页中间的数字位数,一定要偶数阿!否则不能被2除
  $listnum=10;
  echo $this->countline." Items, ".$this->countpage." Pages  ";

  if($this->prevpage==0){
   echo "&lt;&lt;Prev ";
  }else{
   echo "<a href=?page=".$this->prevpage.">&lt;&lt;Prev</a> ";
  }
  
  if($this->countpage<$listnum){          //判断总页数是否小于$listnum
   $page_start=1;
   $page_end=$this->countpage;
  }elseif($this->page<$listnum/2){          //判断当前页是否小于$listnum的一半
   $page_start=1;
   $page_end=$listnum;
  }elseif($this->page>$this->countpage-($listnum/2)){  //判断当前页是否是最后几页了
   $page_start=$this->countpage-($listnum-1);
   $page_end=$this->countpage;
  }else{                    //如果上面的条件都不符合,那当前也正在中间
   $page_start=$this->page-($listnum/2-1);
   $page_end=$this->page+($listnum/2);
  }
  
  for($i=$page_start;$i<=$page_end;$i++){       //根据上面判断的start和end页码,循环输出之间的页码
   if($i==$this->page){
    echo "<b>".$i."</b>  ";
   }else{
    echo "<a href=?page=".$i.">".$i."</a>  ";
   }
  }
  
  if ($this->nextpage==0){
   echo " Next&gt;&gt;";
  }else{
   echo " <a href=?page=".$this->nextpage.">Next&gt;&gt;</a> ";
  }
  
 }

/*
 * 根据sql语句读取数据库中的数据,然后列成表单输出
 * 需要的变量:$field(字段),$table(表名),$startline(开始行),$maxline(每页显示行数)
 * 输出从表格的tr开始,从tr结束,所以在使用这个方法前后要加table的标签
 * */ 
 public function showtable($query){
  $query=$query." LIMIT ".$this->startline.",".$this->maxline;
  $result = mysql_query($query) or die($this->feedback='System Error ,Please contect admin');
  //行循环开始,定义一个$i变量,用来显示行号,每次执行一条while语句,指针就指向下一条数据
  $i=0;
  while ($fetch = mysql_fetch_assoc($result)){
   $i++;
   echo "<tr><td>".$i."</td>";
   //列循环开始,因为通过while后,$fetch已经是个数组,所以通过foreach遍历数组即可
   foreach ($fetch as $value){
    echo "<td>".$value."</td>";
   }
   echo "</tr>";
  }
 }

/*
 * 这个方法是将资源传出,表格在外面自定义样式
 * */
 public function showresult($query){
  $result = mysql_query($query) or die($this->feedback='System Error ,Please contect admin');
  return $result;
 }
}
?>

标签:[!--infotagslink--]

您可能感兴趣的文章: