sajax.php在php中实现ajax技术的类

来源:百度文库 编辑:神马文学网 时间:2024/04/28 19:18:44
sajax.php在php中实现ajax技术的类

      Ajax技术是最近一个比较热门的话题,有很多人追捧,也有人对此不屑,在此我就不多讲理论上的。仅谈谈我在php下用sajax.php进行ajax开发的经验
     在制作之前,大家不放先到这里去下载一个ZIP包。
  http://www.modernmethod.com/sajax/download.phtml
  下载后,我们要用到其中的Sajax.php那个关键的文件。制作Ajax技术的PHP网页,我们要设计3个部分的内容。

1、PHP的函数
  在下载的ZIP包中,大家应该可以看到那个乘法运算的例程。在此步骤中我们把要在PHP代码中处理的事情写在一个函数中。

PHP代码:
function multiply($x, $y) {
return $x * $y;
}


  此函数很简单,大家都看得懂吧,就是做一个乘法运算而已。

2、HTML的Input
  作为一个乘法运算,自然而然的要在页面中显示几个Input,让用户输入数字。因此,我们写出如下代码。



代码:
<input type=\"text\" name=\"x\" id=\"x\" value=\"2\" size=\"3\">*
<input type=\"text\" name=\"y\" id=\"y\" value=\"3\" size=\"3\">
=
<input type=\"text\" name=\"z\" id=\"z\" value=\"\" size=\"3\">
<input type=\"button\" name=\"check\" value=\"Calculate\"
onclick=\"do_multiply(); return false;\">
  由此可以看出,这里有3个text,一个x,一个y,作为运算的2个数组,z为乘法的积。为了保持和第1步中函数的参数变量保持一致,我们起了同样的x 和y的名字。z用来显示运算结果。然后在第4个button中我们调用了一个定义的函数do_multiply(),注意函数名与我们在第1步中的PHP 函数名有些类似,区别是在其名称前面加了一个“do_”前缀。

3、Javascript的函数
  为了让第二步中Input输入的结果提交给第一步中的那个PHP函数,我们要写如下的Javascript代码,也就是第二步中出现的函数do_multiply()。



代码:
function do_multiply() {var x, y;

x = document.getElementById(\"x\").value;//获取X的值
y = document.getElementById(\"y\").value;//获取Y的值
x_multiply(x, y, do_multiply_cb);

}
  在此函数中,我们可以看到函数在获取到Input输入的结果后执行了一个x_multiply()函数。此函数的参数应该和第一步中我们定义的PHP函数的参数保持一致,最后附加的do_multiply_cb为Ajax在调用了PHP的函数后要执行的Javascript函数,我们定义此函数名为 do_multiply_cb,并对此函数作如下的定义。



代码:
function do_multiply_cb(z) {document.getElementById(\"z\").value = z;

}
  此函数有一个参数,返回值直接放入Z中,用以显示返回的结果。


  至此,Ajax设计网页的三个关键步骤制作完毕,然后,我们用搭积木的方式把他们拼接在一起,就大功告成了!

<?
require(\"Sajax.php\");

[步骤1的PHP函数]

sajax_init();
sajax_export(\"multiply\");//声明需要用Ajax关联的函数
sajax_handle_client_request();
>

<script>
<?
sajax_show_javascript();
>
[步骤3的Javascript函数]
</script>

<body>
[步骤2的HTML代码]
</body>
    上面这个例子是网上讲的比较多的一个sajax.php的例子,大家不妨试试这部分代码,可初步对ajax技术带来的技术好处有个理解。然而在实际进行大的开发中需要解决一些问题。
   如上列,字符串传回到multiply()函数时,有中文的话,则是UCS-2格式,如果要想在do_multiply_cb()正确显示从multiply()中得到的中文字符串,则必须先把他转换成UTF-8格式。本老人曾在网上找了好多方法都没有能正确实现,最后自己用如下方法实现,如果有可以改进的地方请指教。
   function   unescape($str)   {

      $str=rawurldecode($str);
      $ar = explode("%u",$str);
       foreach($ar   as   $k=>$v)  {

       if($k!=0){
      
       if(strlen($v)==4)
    $ar[$k]   =   iconv("UCS-2","UTF-8",pack("H4",substr($v,0,4)));
       elseif(strlen($v)>4)
       $ar[$k]   =   iconv("UCS-2","UTF-8",pack("H4",substr($v,0,4))).substr($v,4,strlen($v)-4);
       }else{
      
             if($v!="")
          $ar[$k]   =   $v;
             }
      
       }
      
      
   return   join("",$ar);
}

   另外若想在multiply()函数中传递过来的字符串以简体中文格式插入到数据库中,则还需把原来转换得到的UTF-8格式的字符串再转换为GB2312,代码如下
       function utfgb2($string) {
           $out = iconv( "UTF-8" ,"GB2312",  $string);
           return $out;
      }
    当然如果不需要在do_multiply_cb()正确显示从multiply()中得到的中文字符串,可以在unescape($str)函数中直接把"UCS-2"转换成"GB2312"格式,否则需要转换两次。