Наконец-то я это сделал! Спасибо Господу! Очень взволнован!
У меня есть три основные проблемы в моем предыдущем коде.
Первое: поскольку ajax отправит news_pk в представление update_comment , поэтому мне не нужно добавлять news_pk в URL и шаблон этого представления (в URL тега <form>
и URL в ajax), поэтому я удалил их, иначе данные все равно будут проходить через форму, но не через ajax.
Второе: моя привязка неверна, у меня есть обработчик кликов в форме, он должен быть обработчиком отправки. Если бы я привязывал его к кнопке, то использовал бы обработчик click. Ajax не работает в посте Django
Но в этой части я все еще немного сбит с толку, между способом вершины кнопки и способом отправки формы.
Третья проблема - я ошибся в «комментариях» и «комментариях». «Комментарий» - это атрибут имени <textarea>
, через который Form.py получает данные.
комментарии определяются от ajax до var comments = $("#js-pl-textarea").val(),
, поэтому в представлении мне нужно использовать comments = request.POST.get("comments", "")
, но не комментарий, вот причина, по которой «сообщение не удалось».
Ниже приведен мой код.
Аякс:
$("#comment_form").submit(function(){
var comments = $("#js-pl-textarea").val()
$.ajax({
cache: false,
type: "POST",
url:"{% url 'operation:update_comment' %}",
data:{'news_pk':{{ news.pk }}, 'comments':comments},
async: true,
beforeSend:function(xhr, settings){
xhr.setRequestHeader("X-CSRFToken", "{{ csrf_token }}");
},
success: function(data) {
if(data.status == 'fail'){
if(data.msg == '用户未登录'){
window.location.href="login";
}else{
alert(data.msg)
}
}else if(data.status == 'success'){
window.location.reload();//refresh current page.
}
},
});
return false;
});
Вот мое представление udate_comment:
@login_required
def update_comment(request):
news_pk = request.POST.get("news_pk", 0)
comments = request.POST.get("comments", "")
if int(news_pk) > 0 and comments:
news_comments = NewsComments()
news = News.objects.get(id=int(news_pk))
news_comments.news = news
news_comments.comments = comments
news_comments.user = request.user
news_comments.save()
return HttpResponse('{"status":"success", "msg":"添加成功"}', content_type='application/json')
else:
return HttpResponse('{"status":"fail", "msg":"添加失败"}', content_type='application/json')
Вот моя форма в шаблоне:
<form id="comment_form" action="{% url 'operation:update_comment'%}" method="POST" >
{% csrf_token %}
<textarea id="js-pl-textarea"name="comment"></textarea>
<input type="submit" value="Submit"> </input>
</form>
Я очень ценю ответ каждого! С вашим ответом я разобрался с этими вопросами шаг за шагом!