#1 jake

SpeedPHP框架主要实现的是PHP后端的编程,所以对于前端实现的Ajax等相关技术,并无特殊的要求,也就是说在SpeedPHP中可以使用各种前端技术:Ajax,Flash等等。

Ajax实现,我们比较推荐的是jQuery这个Javascript框架,以下我们来讲述如果在SpeedPHP的应用程序中使用jQuery。

在jQuery + SpeedPHP的组合中,SpeedPHP的作用主要是:


  • 接收在jQuery的Ajax提交的数据,并进行处理。
  • 返回(显示)处理后的数据和结果给jQuery接收并回调执行。
  • 由于jQuery比较推荐使用JSON数据格式,同时JSON格式也是较轻盈的选择,所以SpeedPHP中可以使用json_encode(编码)和json_decode(解码)来接收和发送JSON格式的数据。

以下分别有三个例子可以让大家体会jQuery和SpeedPHP的结合使用:ajax-example[1].zip

例子1. 通过jQuery的Ajax发送数据到SpeedPHP处理并返回结果

表单test.html,jQuery的onclick事件

// 例子一
$('ex1button').click(function(){ // “计算”按钮被点击
        var numval = $('numval').val(); // numval等于id=numval的输入框的值
        // 使用jQuery的$.get来发送数据到myajax/compute中,返回数据。
        $.get('<{spUrl c=myajax a=compute}>', 'num='+numval, function(result){
                $('ex1result').html(result); // 返回的数据直接显示在id=ex1result的span中。
        });
});
控制器myajax.php,compute动作
function compute(){
        // 接收ajax提交的num值
        $num = $this->spArgs('num');
        // 返回(显示)num的平方
        echo $num * $num;
}

步骤:


  • 在页面中加载jQuery库
  • 按钮触发时,使用jQuery的$.get来发送数据
  • 控制器/动作 myajax/compute 接收数据,处理(计算平方),并返回(显示)
  • jQuery接收到数据并显示结果

例子2. 检查用户名是否重复,使用JSON数据

表单test.html,jQuery的onclick事件

// 例子二
$('ex2button').click(function(){ // “检查用户名重复”的按钮被点击
        // 由于需要JSON数据,所以使用$.getJSON
        $.getJSON("<{spUrl c=myajax a=check}>", { 'username': $('username').val() }, function(json){
                // 这里是返回的数据,json变量就是json格式的数据,可以直接使用
                alert("JSON 结果: " + json.status); // 使用json.status,对应myajax/check中的$result['status']
                $('ex2result').html(json.message); // 使用json.message,对应myajax/check中的$result['message']
        });
});
控制器myajax.php,check动作
function check(){
        // 接收提交的username值
        $username = $this->spArgs('username');
        // 检查用户名重名,通常这里是通过数据库检查,这里只是简单演示,如果username等于admin即已经重名
        if( $username == 'admin' ){
                $result = array(
                        'status' => 0, // 失败标志
                        'message' => '已经存在该用户名', // 提示信息
                );               
        }else{
                $result = array(
                        'status' => 1, // 成功标志
                        'message' => '用户名可用', // 提示信息
                );       
        }
        echo json_encode( $result ); // 返回(显示)JSON结果
}

步骤:


  • 在页面中加载jQuery库
  • 按钮触发时,使用jQuery的$.getJSON来发送数据,数据类型为JSON
  • 控制器/动作 myajax/check 接收数据,处理(计算平方),并返回JSON数据(显示JSON数据)
  • jQuery接收到数据,根据数据的结果,分别显示——弹出status,显示message
返回JSON数据需要用到json_encode函数,该函数在PHP默认配置中是存在的,而且如果服务器的PHP没有配置json函数,SpeedPHP也提供了补充json函数,所以在SpeedPHP环境中直接使用json_encode/json_decode函数即可。

例子3. 表单ajax提交,返回HTML数据

表单test.html,jQuery的onclick事件

// 例子三
$("ex3button").click(function(){ // “提交”按钮被点击
        // 构造发送的数据,请注意如果获取表单各项的值
        var formdata = {
                'fname' : $('fname').val(),
                'fsex'  : $('input[@name=fsex]:checked').val(),
                'fclass': $('fclass').val(),
                'fphone': $('fphone').val()
        };
        // 用$.post发送数据
        $.post('<{spUrl c=theform a=mysubmit}>', formdata, function(result){
                $('resulttable').append(result); // 返回的数据直接追加到resulttable表格的后面
        });
});
控制器theform.php,mysubmit动作
function mysubmit(){
        $data = $this->spArgs(); // $data是提交上来的数据
        $data['ctime'] = date('Y-m-d H:i:s');  // 增加当前时间
        // 这里经过处理:入库等
       
        $this->data = $data; // 发送到模板
        // 返回(显示)结果HTML,该结果由Smarty模板提供
        $this -> display('mydata.html');
}
模板mydata.html,和普通模板一样

<{$data.fname}>
<{if 0 == $data.fsex}>男<{else}>女<{/if}>
<{$data.fclass}>
<{$data.fphone}>
<{$data.ctime}>

步骤:


  • 在页面中加载jQuery库(通常可以将此代码写到header.html文件中)
  • 表单提交时,使用jQuery的$.post来发送表单数据
  • 控制器/动作 theform/mysubmit接收表单数据,(写入数据库),然后返回(显示),这里用到了Smarty模板(可以不用,本例只为演示)。
  • jQuery接收到数据并进行回调处理。

以上可以看出,其实Ajax(jQuery)在SpeedPHP框架应用程序中的使用,和普通的Ajax没有什么不同,只是Ajax的地址,可以通过spUrl来进行构造,就此而已。

如果希望在Ajax方面做出更多的特效和加强用户体验,建议大家可以进一步研究jQuery框架,这是非常优良和实用的一门技术。

2012-08-04 14:34:35