Je veux afficher les commentaires des utilisateurs, juste après les avoir publiés.J'ai déjà fait l'ajax télécharger le commentaire, comment puis-je l'afficher à l'utilisateur, sans actualiser? J'ai ce code ajax:Afficher les commentaires sans actualiser
$(".comments input[name='post']").keydown(function (evt) {
var keyCode = evt.which?evt.which:evt.keyCode;
if (keyCode == 13) {
var form = $(this).closest("form");
var container = $(this).closest(".comments");
var input = $(this);
$.ajax({
url: "{% url 'comment' letnik_id=letnik_id classes_id=classes_id subject_id=subject_id %}",
data: $(form).serialize(),
type: 'post',
cache: false,
beforeSend: function() {
$(input).val("");
$(input).blur();
},
success: function (data) {
alert("Successful comment");
$(input).val("");
$(input).blur();
}
});
}
});
Ceci publie le commentaire. Dans views.py i sauvegarder commentaire:
def comment(request, letnik_id, classes_id, subject_id):
try:
if request.method == 'POST':
exam_id = request.POST.get('exam_id')
exam = get_object_or_404(Exam, id=exam_id)
comment = request.POST.get('post')
comment = comment.strip()
if len(comment) > 0:
instance = ExamComment(
exam=exam,
comment=comment,
comment_user=request.user)
instance.save()
return redirect('subject_id', letnik_id=letnik_id, classes_id=classes_id, subject_id=subject_id)
html = ''
for comment in exam.get_comments():
html = '{0}{1}'.format(html, render_to_string('exam_partial_comment.html', {'comment': comment}))
return HttpResponse(html)
else:
return HttpResponseBadRequest()
except Exception:
return HttpResponseBadRequest()
aussi sans: return redirect('subject_id', letnik_id=letnik_id, classes_id=classes_id, subject_id=subject_id)
ce code, je recevrais error400 et je alerte obtenir fréquenté pas le succès ...
puis-je afficher uniquement le nouveau commentaire, pas tous ensemble, car tous les autres seraient déjà rendus? – zzbil
Bien sûr! Au lieu d'interroger tous les commentaires de la vue, envoyez simplement le nouveau commentaire dans JsonResponse dans un dictionnaire, comme JsonResponse ({comment: comment}). Sur la fonction de succès ajax, déposez la boucle for et ajoutez simplement le nouveau commentaire comme div.innerHTML = div.innerHTML + comment; Oui, beaucoup mieux de cette façon. – Tico
Merci beaucoup. Mais il y a un problème. Si je descends ceci: return redirect ('subject_id', letnik_id = letnik_id, classes_id = classes_id, subject_id = subject_id) dans la vue, je n'ai pas de succès dans ajax. Savez-vous pourquoi? J'obtiens l'erreur 400 (mauvaise demande), mais après l'actualisation le commentaire est posté – zzbil