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

来源:百度文库 编辑:神马文学网 时间:2024/04/28 17:33:41
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"格式,否则需要转换两次。