浏览器中的异步请求是指不影响页面加载和渲染的请求,常称之为ajax,在实践中通常把页面中一些不太重要的元素用异步请求进行加载,也有一些把全部网站数据都用异步请求获取,通过JS引擎渲染的,哆麦也支持这样做,不在这篇文章的讨论范围内。
异步请求的应用范围
对于营销网站来说,网站与用户的交互请求不是那么强烈,通过只需要展示一些网页内容,这些内容对所有用户来说都是一样的,所以我们通过缓存的形式节省硬件投入。但页面缓存之后,就不是每时每刻都会更新,难免会存在滞后的现象,例如本网站中内容的阅读数量和喜欢数量,因为我的页面进行缓存了,所以不是每个请求都会被后台程序接收到,但是我又需要统计文章的阅读数量和喜欢的数量,这时候异步请求的作用就凸现了。
发起异步请求
哆麦CMS的异步请求处理文件为根目录下的“dm-ajax.php”,在模板中你可以通过dminfo('ajax_url')获取异步请求的地址,每个异步请求都接收一个必须的参数action,通过GET或者POST方法传送,前端一个典型的异步请求如下(通过jquery实现):
$.ajax( type: 'GET', url: '<?php dminfo('ajax_url')?>', data: {action: 'get_post', post_id: 1}, dataType: 'json', success: function(data){ alert(data); } );
上面这个请求的action名为‘get_post’, 还发送了一个post_id为1的参数。
前端发送请求之后,需要后端进行处理,需要在主题的functions.php文件中添加代码,把相应的处理函数挂在到对应的钩子上,哆麦CMS挂载处理函数的用法为:
add_action('ajax_admin_action', '函数名'); //这个钩子为用户登陆情况下的处理函数,优先级最高
add_action('ajax_action', '函数名'); //这个钩子为普通处理函数
你需要把上述的action改成前端发送的action名,一个典型的处理如下:
<?php function get_post_ajax(){ $post = get_post($_POST['post_id']); header("Content-Type:application:json"); echo json_encode($post); } add_action('ajax_get_post', 'get_post_ajax');
需要注意的是,所以添加的函数,不能和系统已有的函数名出现冲突。
评论列表