AJAX и Django, успех AJAX не работает
На HTML-странице у меня есть таблица, в которую можно сбрасывать элементы и которая отправляется на сервер через AJAX следующим образом:
function drop(ev, el) {
if (ev.target.tagName=="IMG") { return; }
ev.preventDefault();
var data = ev.dataTransfer.getData("text");
el.appendChild(document.getElementById(data));
$.ajax({
type: 'POST',
url: server_url + currentPath,
data: {
'version': data
},
success() {
console.log(data, "ranked ");
},
});
}
на той же странице пользователи отправляют ответ с помощью кнопки, которая связана с функцией, отправляющей POST-запрос на сервер:
function NextPage(){
answer = $("#justification").val();
if (answer.length < 10){
document.getElementById("warning1").innerHTML = "Please provide an answer";
}
else {
$.ajax({
type: "POST",
url: server_url + currentPath,
data: {'answer' : answer},
success: function () {
window.location.href = server_url+ nextPath;
}
});
}
}
Я могу прочитать данные из запроса сообщения на стороне сервера (т.е. версию и ответ), и они также сохраняются, но затем я не могу перейти на следующую страницу, и нет никаких сообщений об ошибках; я заметил, что ответ теперь передается как параметр URL; не уверен, что это значит. Думаю, он застревает из-за ошибки. Я проверил CurrentPath и NextPath, и они верны. Я думаю, что проблема связана с объектом ранжирования, потому что, когда я его удалил, все работает отлично. Может ли кто-нибудь заметить, что я что-то упустил, что вызвало эту проблему? Вот мой вид:
@csrf_exempt
@login_required
def task_view(request ,visualisation, task, progress):
participant = get_object_or_404(Participant, user=request.user)
question_list = Question.objects.filter(complexity = 'N')
question = question_list[0]
answer, created = Answer.objects.get_or_create(participant=participant, question=question)
ranked_visualisation = SVG.objects.filter(name=visualisation, task=task)
if request.method == 'POST':
participant_answer = request.POST.get('answer')
current_version = request.POST.get('version')
for i in ranked_visualisation:
ranking, created = Ranking.objects.get_or_create(participant=participant, svg=i)
if ranking.svg.version == current_version:
ranking.ranking = 10
else:
ranking.ranking = 20
ranking.save()
tasks_completed = participant.tasks_completed
if participant_answer and not participant_answer.isspace():
tasks_completed = tasks_completed +1
else:
tasks_completed = tasks_completed
participant.tasks_completed = tasks_completed
participant.save()
answer.answer = participant_answer
answer.save()
context = {'task':task,'question': question, 'answer': answer, 'progress': progress}
return render(request, 'study/A.html', context)
вот мои модели:
class SVG(models.Model):
name = models.CharField(max_length=200)
version = models.CharField(max_length=200, default='none')
task = models.CharField(max_length=200, default='none')
def __str__(self):
return self.name
class Ranking(models.Model):
participant = models.ForeignKey(Participant, on_delete=models.CASCADE)
ranking = models.IntegerField(default=0)
svg = models.ForeignKey(SVG, on_delete=models.CASCADE)
class Answer(models.Model):
participant = models.ForeignKey(Participant, on_delete=models.CASCADE)
question = models.ForeignKey(Question, on_delete=models.CASCADE)
answer = models.TextField(blank=True, null=True)