飞龙博客

善人行善,从乐入乐。

php点击加入或取消收藏ajax接受数据session存储

feilong.org 修订于2012-02-03 01:22:43 1,661

点击某个图片或文本链接或任何DOM元素,将某日志文章加入收藏或取消收藏,可以采用ajax实现,然后在接受数据页用session存储该文章ID号。如何用Ajax与session结合,实现加入或取消收藏的功能?飞龙自己捣鼓了以下的代码。本日志修订网址:http://feilong.org/ajax-session-click-add-remove-favorate

一、首先在点击互动页,一般是某文章页。
飞龙的WordPress是某个single日志页,需要实现点击链接切换收藏或取消收藏的效果。同时需要向目标数据接受页传递日志ID号。

1、根据本文章是否已经收藏,调出对应的链接图片或文本:

<?php 
@session_start();$addids=$_SESSION['pids'];print_r($addids);
if(in_array($postid,$addids)){$hide2='hide';}else{$hide1='hide';}
?>
<a href="#" title="已收藏,取消标记吗" id="biaojied" class="<?php echo $hide1; ?>"><span>取消收藏</span></a>
<a href="#" title="把本文加入收藏" id="biaoji" class="<?php echo $hide2; ?>"><span>加入收藏</span></a>
 
<a id="pid" title="<?php $postid=$post->ID;echo $post->ID;//feilong ?>" href="<?php the_permalink(); ?>"><?php the_title(); ?></a>

2、点击上面显示出来的某个链接,实现轮换链接,并实现向“数据接受页”传递日志ID号。以下是飞龙自己写的jQuery和Ajax结合实现变换和传递数据。

////收藏////
$(function(){
var pid=$("#pid").attr("title");//alert(pid);
$("#biaoji").click(function(){//
 
$(this).toggleClass("hide");
 
// 向‘收藏页’提交此文的pid
$.ajax({
type: "POST",
url: "http://127.0.0.1/xinyuan/bookmark",//此为数据接受页,可以改为你自己的实际url
data:"pid="+pid,
 
success: function(msg){ // alert(msg);
 
var addpid=$(msg).find("#addpid").text();//alert(addpid); //此#addpid点击的同时,数据接受页内的DOM
//$("#zhaiyao").append(msg);
if(addpid){
alert('success: 收藏此文ID:'+addpid); //成功提示,可以采用其它方式提示
}else{//收藏失败
}//
 
}//success
 
});//$.ajax
 
$("#biaojied").toggleClass("hide");
 
});
});//0
 
////取消收藏////
$(function(){
var pid=$("#pid").attr("title");//alert(pid);
$("#biaojied").click(function(){//
 
$(this).toggleClass("hide");
 
// 向‘收藏页’提交此文的pid
$.ajax({
type: "POST",
url: "http://127.0.0.1/xinyuan/bookmark",
data:"pid="+pid,
 
success: function(msg){ // alert(msg);
 
var movepid=$(msg).find("#movepid").text();//alert(movepid); 
//$("#zhaiyao").append(msg);
if(movepid){
 
alert('success: 取消收藏此文ID:'+movepid); 
 
}else{
//无法取消收藏?
}//
 
 
}//success
 
});//$.ajax
 
$("#biaoji").toggleClass("hide");
 
});
});//0

二、数据接受页,飞龙采用指定的某page页面。需要接受来自 互动点击页的ID,并检查已有session是否有此日志ID,并做相应的处理,输出新的session值。如果是直接打开此页面,而没有接受到任何数据,那么直接取出已有的session值。

1、接受传递过来的日志ID,并处理session得到新session,显示日志ID的DOM,方便第一步里msg调用。

 
<?php
$pid=$_POST['pid'];
 
if($pid){
fl_add_favors($pid);
//$pids=$_SESSION['pids'];
 
$addpid=$_SESSION['addpid'];
echo '<div id="addpid">'.$addpid.'</div>';
 
$movepid=$_SESSION['movepid'];
echo '<div id="movepid">'.$movepid.'</div>';
 
}else{//直接打开此收藏页的情况下,取出已有session即可
@session_start();
$pids=$_SESSION['pids'];
 
print_r($pids);
 
}///
 
?>

2、飞龙写的session处理函数:接受来自 互动点击页的ID,并检查已有session是否有此日志ID,并做相应的处理,输出新的session值。

function fl_add_favors($pid){
@session_start();
 
$old=$_SESSION['pids'];
if(in_array($pid,$old)){//已收藏,干掉
$a2[]=$pid;
//从数组中去掉此 $pid,返回两个数组的差集数组。键名保持不变。
$new=array_diff($old,$a2);// $old-$a2
unset($_SESSION['addpid']);$_SESSION['movepid']=$pid;
echo '<script language="JavaScript">alert("取消标记啦!";</script>';
 
}else{//没收藏?加入
$new=$old;$new[]=$pid;
$_SESSION['addpid']=$pid;unset($_SESSION['movepid']);
echo '<script language="JavaScript">alert("本文成功加入收藏夹!";</script>';
 
}
 
//去掉空值
$new=array_filter($new);   
 
$_SESSION['pids']=$new;
 
 
}//20120202 feilong

更新网址:http://feilong.org/ajax-session-click-add-remove-favorate
最初发布:20120203 12:55:02 feilong.org 于广州

加入收藏夹,查看更方便。

所在分类: wordpress 网站开发

新作:

旧文:

飞龙前端QQ群 智能锁咨询交流