попытаться изменить заголовки запроса
<?php
header("Access-Control-Request-Headers: origin, x-requested-with");
...
?>
Это - грязная/нетестируемая теоретическая реализация с помощью 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>
$(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);
}
});
}
});
});
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 и интересуетесь более протестированным/реальным implemention голосования Stackoverflow, я предлагаю, чтобы Вы проверили исходный код для cnprog.com, китайского клона Stackoverflow, записанного в Python/Django. Они выпустили свой код, и это довольно достойно.
Я thnk ответы для этих вопросов должен жаждать stackoverflow.
Я рекомендовал бы хранить голоса в Базе данных.
Вы не упоминаете язык программирования серверной стороны.
дайте нам еще некоторую информацию
Это могло бы помочь Вам начать
Несколько точек никто не упомянул:
src="http://stackoverflow.com/question_555/vote/up/answer_3/"
.Вы создаете кнопки, которые могут быть ссылками или изображениями или что бы то ни было. Теперь сцепите функцию JavaScript до события щелчка каждой кнопки. При нажатии функция стреляет и
UPDATE posts SET score=score+1 WHERE score_id={{insert id here}};
.Можно сохранить код в переменной, но это сложно и зависит от того, как хорошо Вы знаете семантику среды выполнения своего кода. Это в конечном счете должно быть продвинуто к персистентному устройству хранения данных так или иначе, так использование базы данных 100% является хорошим начальным решением. Когда время для оптимизации производительности настает, существует достаточно программного обеспечения в мире для кэширования запросов базы данных, чтобы заставить Вас чувствовать себя одурманенными поэтому дело не в этом большой соглашение.