侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

ajax初体验

2024-05-12 星期日 / 0 评论 / 0 点赞 / 85 阅读 / 6994 字

一直以来对于ajax的逻辑似懂非懂,主要是这种技术牵涉的东西太多,比如后台数据的获取及和前端的结合,说起来容易,但做起来难,原因是还没有掌握ajax骨干方面的东西,并且也不知道如何测试,后来做shop

一直以来对于ajax的逻辑似懂非懂,主要是这种技术牵涉的东西太多,比如后台数据的获取及和前端的结合,说起来容易,但做起来难,原因是还没有掌握ajax骨干方面的东西,并且也不知道如何测试,后来做shopnc商城,读取源码,试着自己做了个点击数的ajax,没想到竟然有点门了。

比如先要理顺ajax代码的主要骨干,先把它理出来,具体里面的一些细节就好办了。

(function($) {
    $.fn.microshop_click = function() {
        
        
        return this.each(function() {
            
            $(this).click(submit_like);
        });
        function submit_like() {
            
            $.getJSON("index.php?act=like&op=click_result",  function(json){
                
            });
        }
        
        
    }
})(jQuery);

服务器端的是

public function click_resultOp(){
//        $model_micro = Model('micro_store');
//        $result = $model_micro->getClassStoreNav(array('microshop_store_id' => array(3)),null,'comment_count','comment_count','');
//        self::echo_json($result);
//        //print_r(self::echo_json($result));
//    }
        $arr = array('name'=>'李三','age'=>34,'sex'=>'男');
        self::echo_json($arr);
    }

测试时在地址栏中输入http://localhost/microshop/index.php?act=like&op=click_result

就可以得到服务器传来的json数据,测试时可以用chrome中的F12中的network,其中preview里可以看见json格式



现在回想一下为啥ajax容易学,但不容易掌握,主要是服务器端的玩法不理解,就拿shopnc的喜欢数来分析:

public function like_saveOp() {

        $data = array();
        $data['result'] = 'true';
        $data['message'] = Language::get('microshop_like_success');
        
        $like_id = intval($_GET['like_id']);
        $like_type = self::get_channel_type($_GET['type']);
        if($like_id <= 0 || empty($like_type)) {
            $data['result'] = 'false';
            $data['message'] = Language::get('wrong_argument');
            //echo $data['message'];
            self::echo_json($data);
            //echo $like_id.'-------------';
        }

        if(!empty($_SESSION['member_id'])) {
            $param = array();
            $param['like_type'] = $like_type['type_id']; 
            $param["like_object_id"] = $like_id;
            $param['like_member_id'] = $_SESSION['member_id'];
            $model_like = Model('micro_like');
            $is_exist = $model_like->isExist($param); 
            if(!$is_exist) {
                $param['like_time'] = time();
                $result = $model_like->save($param);
                if($result) {

                    //喜欢计数加1
                    $model = Model();
                    $update = array();
                    $update['like_count'] = array('exp','like_count+1');
                    $condition = array();
                    $condition[$like_type['type_key']] = $like_id;
                    $model->table("micro_{$_GET['type']}")->where($condition)->update($update);

                    //返回信息
                    $data['result'] = 'true';
                } else {
                    $data['result'] = 'false';
                    $data['message'] = Language::get('nc_common_save_fail');
                }
            } else {
                $data['result'] = 'false';
                $data['message'] = Language::get('microshop_like_fail');
            }
        } else {
            $data['result'] = 'false';
            $data['message'] = Language::get('no_login');
        }
        
        self::echo_json($data);
        //echo $like_id.'-------------';
    }

其中 $like_id = intval($_GET['like_id']);是通过ajax服务器中的数据请求地址http://localhost/microshop/index.php?act=like&op=like_save&type=store&like_id=6来获得的,如地址中有这个参数like_id=6这样intval($_GET['like_id'])就派上用场了。那么这里为啥要搞一个html页面中的id值呢,这里就是一个技巧,因为这个值就是店铺的id,另外这里还有一个不符合html规范的写法,即一个页面中有很多like_id,不过这并不影响正确显示,并且这里用很多重复的like_id主要是因为取值时,sql条件要用到店铺这个id号。

广告 广告

评论区