jackyrong

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

  最近项目里偶然要用到一些小的ajax功能,PHP下的AJAX框架也很多选择的,这次没考虑太多,选了个最短小的sajax,才一个类文件库,而且可以在各类编程语言环境下使用,因此觉得也不错的。

   要实现的是,一个文本框,一个下拉框,当用户在第一个文本框输入一些内容后,按“确定”,然后到后台进行一些计算和判断,然后动态产生的内容填充到第二个下拉框里再给用户选择。

    使用sajax其实很简单,首先当然要包含sajax这个文件
   require("Sajax.php");

$sajax_remote_uri = "http://a..php;"    //这里是远程要处理判断结果的一个页面


sajax_init();  //Sajax初始化函数,看过Sajax.php的都知道,其实这个函数的内容是空的,这里写的目的就是告诉你这个页面会使用Sajax。因为Sajax并不是一个类,而是一个函数集,所以不需要建立对象,实际应用中不执行这个函数也没有关系。


sajax_export("riqi");

//用sajax_export定义将要在Javascript输出的函数,也就是从HTML页面中可以使用的函数。将函数的名字传递给sajax_export,如果多个函数可以向sajax_export传递多个参数来实现


sajax_handle_client_request();
//处理客户端需求函数,开始访问页面的时候不会起作用,但是当客户端将需求(运行哪个函数,参数是多少等等)传递过来的时候就由这个来处理了。
好了,后台的PHP部分结束,下面是HTML显示部分,纯粹的HTML基础就不管了,只说和Sajax使用有关的部分

<?
sajax_show_javascript();
//显示Sajax生成的Javascript,
?>

接下来我们写处理的函数
比如在那个“确定”按钮的onclick事件中,如下写:

function getriqi()
{
 var yearend=frm.yend.value
    。。。。。。。
     x_riqi(yearend,getriqidb);

}
这里比如可以先获得要判断计算的值(比如这里的yearend),然后注意
x_riqi(yearend,getriqidb)这句话
这里的riqi函数,是在前面PHP中用sajax_export定义,由sajax_show_javascript输出的函数之一,其格式就是你在sajax_export中定义的函数名前面加x_。,接着可以把要传递的参数一个个接着写下去。

接下来就可以写getriqidb这个判断function里,比如:
function getriqidb(content)
{
document.getElementById('content').innerHTML=content
.............


}
注意,这里其实是一个用来显示经过远端计算页面计算返回的结果的方法来的,比如远端的页面a.php收到参数后,经过计算,异步返回给页面内容content,就可以在这里输出拉,比如上文提到的,根据返回的结果来填充下拉列表框。


最后,我们写那个远端判断的页面a.php
<?
if($_GET['rs'] == 'riqi')
{
$yearend=$_GET['rsargs'][0];
....
//之后做相关的业务逻辑计算

}
这里,用$_get['rs']来判断是否等于“riqi","riqi"是之前我们定义好的(sajax_export("riqi");),
如果是的话,则表示是来自sajax的请求,注意 $_get['rs']也是固定的,不能改变。
之后用 $_GET['rsargs'][0]来取出第一个参数,如此类推。。。。。

最后,要将结果返回给前端的页面,用
 echo("##".$content);
注意,这里的输出内容变量$content,要和前端页面里function getriqidb(content)里的定义好的content在命名上是相同的哦。

而可能是sajax的一个BUG(在IBM DW站上有说),在输出时,前端会没了两个字符,比如要输出的内容为2004,会变成04,而在前面加上##时,就正确了,哈哈。


      SAJAX还在发展中,比较小巧,但也有不足,但用起来还是方便的,大家可以参考IBM DW站上关于SAJAX的文章介绍,很不错的

posted on 2006-11-07 15:53  jackyrong的世界  阅读(910)  评论(0编辑  收藏  举报