0

我有这个脚本。如果该主题已被点赞,则效果很好,但如果它从未被标记为喜欢,则需要双击它以显示用户已点赞。我如何让它第一次工作。这是旧对话的延续,我从旧对话中得到了很大的帮助

$(document).ready(function(){
    $("#like<? echo $msgID;?>").click(function(){                                      
        var isLike = $(this).text() === "Like",
        url = isLike ? "status-updates/like.php?status_id=<? echo $msgID;?>&user=<? echo $session->username;?>" : "status-updates/unlike.php?status_id=<? echo $msgID;?>&user=<? echo $session->username;?>";
    $.post(url + "?status_id=<? echo $msgID;?>&user=<? echo $session->username;?>", $(this).serialize());
    setTimeout(function () {
        $("#likeDiv<? echo $msgID;?>").load('status-updates/like-count.php?status_id=<? echo $msgID;?>');
        $(".whoLikes<? echo $msgID;?>").load('status-updates/who-likes.php?status_id=<? echo $msgID;?>');
        $("#like<? echo $msgID;?>").text(isLike ? "Unlike" : "Like");
    }, 500);                                   
});     
});
4

1 回答 1

1

我怀疑您的问题可能归结为以下几行:

var isLike = $(this).text() === "Like";
url = isLike ? "status-updates/like.php?status_id=<? echo $msgID;?>&user=<? echo $session->username;?>" : "status-updates/unlike.php?status_id=<? echo $msgID;?>&user=<? echo $session->username;?>";

或者,以非很长的滚动方式,

var isLike = $(this).text() === "Like";
url = isLike ? <like URL> : <unlike URL>;

换句话说,当文本已经说“喜欢”时,被POST编辑到的 URL 就是实际“喜欢”的那个。

顺便说一句,有一种更简洁的方法可以执行您使用 调用的延迟setTimeout,这似乎旨在等待半秒 - 您希望post在运行之前完成足够的时间。相反,您可以在 POST 完成后使用以下第三个参数简单地运行代码$.post

$.post( <url>, <data>, 
        function () {
          $("#likeDiv<? echo $msgID;?>").load('status-updates/like-count.php?status_id=<? echo $msgID;?>');
          $(".whoLikes<? echo $msgID;?>").load('status-updates/who-likes.php?status_id=<? echo $msgID;?>');
          $("#like<? echo $msgID;?>").text(isLike ? "Unlike" : "Like");
        }
);
于 2013-09-03T21:53:07.737 回答