我正在构建一个Like / Different系统,我有一个类似于类的按钮,如果我点击它,数据被插入到数据库中,并且类被更改为不同。
并不像假设拉另一个ajax调用什么删除了实际的但是它不起作用,当类改变它时会预先形成像类假设要做的事情,并且它只有在刷新页面时才有效。
php code
<div class="btn-group pull-right">
<?php
$like = '<button class="btn btn-primary btn-small like" data-like="'.$user->id.'">
<i class="icon-thumbs-up icon-white"></i> Like
</button>';
foreach ($user->likes as $likes) {
if($likes['liked_by'] == Session::get('sentry_user')) {
$like = '<button class="btn btn-primary btn-small unlike" data-like="'.$user->id.'">
<i class="icon-thumbs-down icon-white"></i> Unlike
</button>';
break 1;
}
}
echo $like;
?>
</div>
jquery的
$('button.like').bind('click', function(){
var likeId = $(this).data('like');
$.ajax({
url: siteUrl + 'profile/like',
type: "post",
data: {user_id: likeId},
dataType: "json",
context: this,
beforeSend: function()
{
$(this).addClass('disabled');
},
success: function(data)
{
if(data.status == "like") {
$(this).removeClass('like')
.addClass('unlike')
.append()
.html('<i class="icon-thumbs-down icon-white"></i> Unlike');
}
},
complete: function()
{
$(this).removeClass('disabled');
}
});
});
$('button.unlike').bind('click', function(){
var likeId = $(this).data('like');
alert('you are about to unlike');
})
刚刚为一个例子制作了一个不同的警报来测试它,以便用它进行ajax调用。
所以云有人给我一个暗示吗?
答案 0 :(得分:1)
我在我的应用程序上做了类似的事情,我使用了这个逻辑:
HTML:
<a class="like" onclick="like($(this))"></a>
JS:
function like(_element){
if($(_element).hasClass('unlike')){
$.ajax(); //do unlike
$(_element).removeClass('unlike'); // this goes inside the success:function(){} of the ajax call
}else{
$.ajax(); //do like
$(_element).addClass('unlike'); // this goes inside the success:function(){} of the ajax call
}
}
你也可以重构这个例子,只使用1个ajax调用,你将拥有更少的代码
答案 1 :(得分:1)
你也可以这样使用$(selector).toggleClass();
:
jQuery的:
$('button.like,button.unlike').on('click',function(){
$.ajax(
...
$(this).toggleClass('like unlike');
);
})
这是jsbin
答案 2 :(得分:0)
您可以使用像http://phery-php-ajax.net这样的库,使您能够将代码保持DRY,并且可以重用代码而无需重新绑定click事件: 这适用于通过ajax添加的所有按钮,可以在任何地方重复使用
data-remote
是远程函数的名称,在本例中是action。它使用事件委派,因此无需手动将click事件绑定到按钮
<div class="btn-group pull-right">
<?php
$like = '<button data-remote="action" class="btn btn-primary btn-small like" data-args="'.Phery::args(array('id' => $user->id, 'perform' => 'like')).'">
<i class="icon-thumbs-up icon-white"></i> Like
</button>';
foreach ($user->likes as $likes) {
if($likes['liked_by'] == Session::get('sentry_user')) {
$like = '<button data-remote="action" class="btn btn-primary btn-small unlike" data-args="'.Phery::args(array('id' => $user->id, 'perform' => 'unlike')).'">
<i class="icon-thumbs-down icon-white"></i> Unlike
</button>';
break 1;
}
}
echo $like;
?>
</div>
你喜欢/不像回调
// in your profile/like
function action($data){
$r = new PheryResponse;
// $data['id'] got the ID of the like
if ($data['perform'] === 'like'){
$r
->this()
->removeClass('like')
->addClass('unlike')
->phery('set_args', array('id' => $data['id'], 'perform' => 'unlike'))
->html('<i class="icon-thumbs-down icon-white"></i> Unlike'); // exchange the data
} elseif ($data['perform'] === 'unlike'){
$r
->this()
->removeClass('unlike')
->addClass('like')
->phery('set_args', array('id' => $data['id'], 'perform' => 'like'))
->html('<i class="icon-thumbs-up icon-white"></i> Like'); // exchange the data
}
return $r;
}
Phery::instance()->set(array(
'action' => 'action'
))->process();