У меня есть основанный вид класса, который отображает страницы и обрабатывает POST запросы, например:Создание AJAX POST на основе зрения класса
class citywall (View):
def get(self, request, *args, **kwargs):
template_name = 'citywall.html'
city_slug = kwargs['city_slug']
context = self.get_context_data(city_slug)
return render_to_response(template_name, context, RequestContext(request))
def post(self, request, *args, **kwargs):
if request.is_ajax:
if request.POST.has_key('comment'):
#process comment
...
if request.POST.has_key('vote'):
#process vote
...
Проблема в том, когда я пытаюсь POST формы с AJAX, отправляются два запроса. Запрос Ajax, а затем регулярный запрос POST.
Это мой комментарий форма в HTML:
<form class="comment_form" data-id="{{post.id}}" method="POST" >{% csrf_token %}
<textarea rows = "1" name="comment" class="form-control" placeholder="Write a comment..." ></textarea>
<button type="submit" class="btn btn-info">Go!</button>
</form>
Это код JQuery:
var comment_form = $('.comment_form')
comment_form.submit(function(){
var post_id = $(this).data('id');
var comment = $(this).find('textarea[name="comment"]').val();
$.ajax({
url: "",
dataType:"json",
type:"POST",
data:{
comment: comment,
post_id: post_id,
csrfmiddlewaretoken:'{{csrf_token}}',
},
success:function(json)
{
alert(json);
},
});
});
Когда я отправить форму это происходит:
AJAX POST производится с помощью json
data
(post_id, comment, csrf).Ответ на сообщение AJAX получен в браузере.
POST сделан с html
form data
(комментарий и csrf).
Почему производится вторая POST?
У меня есть несколько типов форм на странице, например. форму комментариев, форму голосования и т. д., и я хочу сделать все из них AJAX. Это хорошая идея реализовать их все с помощью вышеупомянутого метода?
Второй запрос «POST» по-прежнему производится. Я думаю, что это из-за метода post, он заставляет второй запрос. –
@HHH, попробуйте добавить аргумент 'e' обработчику событий (' function (e) ') и вызвать' e.preventDefault() '. –
Это работает! Что происходит? Я думал, что это из-за «почтового метода», не могли бы вы объяснить? –