【发布时间】:2013-11-24 17:40:35
【问题描述】:
我有一个基于类的视图,它显示一个页面并处理 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
...
问题是当我尝试使用 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(comment 和 csrf) 进行。
为什么要进行第二次 POST?
例如,我在页面上有几种类型的表单。评论表、投票表等,我想把它们全部做成 AJAX。用上面提到的方法实现所有这些是个好主意吗?
【问题讨论】:
标签: ajax django django-class-based-views