一直以来对于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',''); // 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号。 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|