【发布时间】:2019-05-24 15:05:31
【问题描述】:
我正在创建一个允许用户搜索论文列表的网站。一旦返回论文列表,用户可以对一篇或多篇论文点击“喜欢”或“不喜欢”。当用户点击like按钮时,like count应该动态更新。
我正在使用 jquery 来处理点赞数的动态更新。但是,我不确定如何告诉 ajax 中的 success 函数要更新哪个 id。原因是id 是动态生成的,它取决于哪些论文作为搜索结果返回给用户。
到目前为止,我在模板中有以下内容:
{% for result in results %}
<li >
{{ result.title}},
<a href="#" class="like_button" data-pid="{{ result.pk }}"> <span class="like_span fa fa-thumbs-up"></span> </a>
<strong id="like_count_{{ result.pk }}">{{result.likes}} </strong>
</li>
{% endfor %}
如您所见,我将希望动态更新发生的部分的 id 指定为"like_count_{{ result.pk }}"。我不确定这是否是最好的方法。
jquery 部分如下所示:
<script>
$(document).ready(function(){
$(".like_button").click(function(){
$.ajax({
type: "GET",
data: {'pk': $(this).data('pid'),
'liked': $("span").hasClass('fa fa-thumbs-up') },
url: "{% url 'search:paperpreference' %}",
success: function(response) {
var pk = $(this).data('pid');
$(?????).html(response.likes )
},
error: function(response, error) {
alert(error);
}
});
});
});
</script>
简单地说,我不知道如何指定 ?????部分这样,当成功时,新的喜欢计数仅更新到该特定论文,而不是循环中的第一篇论文。
views.py 目前有以下内容:
def paperpreference(request):
# if request.method == "GET":
pid = request.GET['pk']
paper = Paper.objects.get(pk=pid)
likes = paper.likes + 1
paper.likes = likes
paper.save()
data = {'likes': paper.likes}
return JsonResponse(data)
我是 Jquery 的新手,任何帮助将不胜感激!
【问题讨论】:
-
$("#like_count_" + pk)?
-
试过了,但不幸的是这不起作用..
-
添加
console.log(pk)语句和console.log("#like_count_" + pk)。然后调试您的页面,在您的控制台中,自己键入$("#like_count_2")以查看结果。或者在你的成功函数中设置一个断点并直接在那里检查你的变量。 -
感谢您的建议!我在控制台中遇到了这个错误:
Uncaught ReferenceError: pk is not defined。显然,pk值没有通过 -
抱歉让我澄清一下 - 如果我在成功函数中留下
var pk = $(this).data('pid');,#like_count_undefined会打印在控制台中。当我在成功函数中删除var pk = $(this).data('pid');时,我得到Uncaught ReferenceError: pk is not defined
标签: javascript jquery ajax django