いいね機能の切り替えが正しく行われない原因は、JavaScriptのコードの中で、変数 el に$(".like") が代入されてて、この要素がクリックされたときに data-is_liked と data-url の値が変更されて、全てのいいねボタンの状態が同期してしまうことかな?
だから、Ajax通信が成功したときに、クリックされた要素 $(this) に対して data-is_liked と data-url の値を変更するように修正すれば、各いいねボタンの状態を正しく反映できるようになる?
実装して確認したわけではないので参考までに
修正後
$(".like").on("click", function () {
console.log("clicked");
var el = $(this); // 修正
var tweet_id = el.attr("name"); // 修正
$.ajax({
type: "POST",
method: "POST",
url: el.data("url"), // 修正
data: {
"id": tweet_id
},
dataType: "json"
}).done(function(data){
$("#tweet_"+String(data["tweet_id"])).text("いいね " + "(" + String(data["like_count"] + ")"));
if (el.data("is_liked") == "False") {
el.data("is_liked", "True"); // 修正
el.data("url", "{% url 'tweets:unlike' tweet.pk %}"); // 修正
} else {
el.data("is_liked", "False"); // 修正
el.data("url", "{% url 'tweets:like' tweet.pk %}"); // 修正
}
})
});
1Like