gpt4 book ai didi

javascript - 你怎么能像在 Stackoverflow 中一样制作一个投票赞成按钮?

转载 作者:IT老高 更新时间:2023-10-28 21:59:30 26 4
gpt4 key购买 nike

问题

  1. 如何制作一个 Ajax 按钮(向上和向下箭头)以使数字可以增加或减少
  2. 如何将用户的操作保存到变量 NumberOfVotesOfQuestionID

我不确定是否应该对变量使用数据库。但是,我知道还有一种更简单的方法可以节省投票数。

您如何解决这些问题?

[编辑]

服务器端编程语言是 Python。

最佳答案

这是一个使用 jQuery/Django 的肮脏/未经测试的理论实现。

我们假设上下投票是针对本网站上的问题/答案,但这显然可以根据您的实际用例进行调整。

模板

<div id="answer_595" class="answer">
<img src="vote_up.png" class="vote up">
<div class="score">0</div>
<img src="vote_down.png" class="vote down">
Blah blah blah this is my answer.
</div>

<div id="answer_596" class="answer">
<img src="vote_up.png" class="vote up">
<div class="score">0</div>
<img src="vote_down.png" class="vote down">
Blah blah blah this is my other answer.
</div>

Javascript

$(function() {
$('div.answer img.vote').click(function() {
var id = $(this).parents('div.answer').attr('id').split('_')[1];
var vote_type = $(this).hasClass('up') ? 'up' : 'down';
if($(this).hasClass('selected')) {
$.post('/vote/', {id: id, type: vote_type}, function(json) {
if(json.success == 'success') {
$('#answer_' + id)
.find('img.' + vote_type);
.attr('src', 'vote_' + vote_type + '_selected.png')
.addClass('selected');
$('div.score', '#answer_' + id).html(json.score);
}
});
} else {
$.post('/remove_vote/', {id: id, type: vote_type}, function(json) {
if(json.success == 'success') {
$('#answer_' + id)
.find('img.' + vote_type);
.attr('src', 'vote_' + vote_type + '.png')
.removeClass('selected');
$('div.score', '#answer_' + id).html(json.score);
}
});
}
});
});

Django View

def vote(request):
if request.method == 'POST':
try:
answer = Answer.objects.get(pk=request.POST['id'])
except Answer.DoesNotExist:
return HttpResponse("{'success': 'false'}")

try:
vote = Vote.objects.get(answer=answer, user=request.user)
except Vote.DoesNotExist:
pass
else:
return HttpResponse("{'success': 'false'}")

if request.POST['type'] == 'up':
answer.score = answer.score + 1
else:
answer.score = answer.score - 1

answer.save()

Vote.objects.create(answer=answer,
user=request.user,
type=request.POST['type'])

return HttpResponse("{'success':'true', 'score':" + answer.score + "}")
else:
raise Http404('What are you doing here?')

def remove_vote(request):
if request.method == 'POST':
try:
answer = Answer.objects.get(pk=request.POST['id'])
except Answer.DoesNotExist:
return HttpResponse("{'success': 'false'}")

try:
vote = Vote.objects.get(answer=answer, user=request.user)
except Vote.DoesNotExist:
return HttpResponse("{'success': 'false'}")
else:
vote.delete()

if request.POST['type'] == 'up':
answer.score = answer.score - 1
else:
answer.score = answer.score + 1

answer.save()

return HttpResponse("{'success':'true', 'score':" + answer.score + "}")
else:
raise Http404('What are you doing here?')

哎呀。当我开始回答这个问题时,我并不想写这么多,但我有点得意忘形。当页面首次加载等时,您仍然缺少获得所有投票的初始请求,但我将把它作为练习留给读者。无论如何,如果您正在实际上使用 Django 并且对 Stackoverflow 投票的更经过测试/真实的实现感兴趣,我建议您查看 source code cnprog.com,一个用 Python/Django 编写的 Stackoverflow 的中文克隆。他们发布了他们的代码,而且相当不错。

关于javascript - 你怎么能像在 Stackoverflow 中一样制作一个投票赞成按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/719194/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com