使用jquery1.7.1和django1.3,我试图通过ajax发布帖子请求,我在web上找到的一些教程代码
$(document).ready(function(){
$("#create").click(create_note);
});
var create_note = function() {
var title = $("#title").val()
var slug = $("#slug").val()
if (title != "" && slug != "") {
var data = { title:title, slug:slug };
console.log('title='+title);
console.log('slug='+slug);
var args = { type:"POST", url:"/create/", data:data, complete:done };
$.ajax(args);
}
else {
// display failure
}
return false;
};
网址“/ create /”映射到django视图
(r'^create/$','notes.views.create_note'),
def create_note(request):
error_msg = u"No POST data sent."
if request.method == "POST":
post = request.POST.copy()
if post.has_key('slug') and post.has_key('title'):
slug = post['slug']
if Note.objects.filter(slug=slug).count() > 0:
error_msg = u"Slug already in use."
else:
title = post['title']
new_note = Note.objects.create(title=title,slug=slug)
return HttpResponseRedirect(new_note.get_absolute_url())
else:
error_msg = u"Insufficient POST data (need 'slug' and 'title'!)"
return HttpResponseServerError(error_msg)
当我点击提交按钮时,会触发javascript函数create_note
,我收到403错误。必须是csrf问题..
我试图通过修改就绪功能来解决这个问题
$(document).ready(function(){
$.ajaxSetup({
data: {csrfmiddlewaretoken: '{{ csrf_token }}' },
});
$("#create").click(create_note);
});
但它不起作用..我仍然得到403 error
所以,我尝试修改ajax
调用
var create_note = function() {
var data = { title:title, slug:slug ,csrfmiddlewaretoken: '{{ csrf_token }}'};
...
var args = { type:"POST", url:"/create/", data:data, complete:done };
$.ajax(args);
};
仍然导致403错误..
请告诉我应该怎么做才能纠正这个......我看到了
django doc关于这一点,但我很困惑如何利用它。我应该将整个jQuery(document).ajaxSend(...
代码复制到我的javascript文件中......我真的很困惑......
答案 0 :(得分:4)
您需要(as the document you linked to suggests)复制整个ajaxSend
方法......
您不需要以任何方式修改它 - 它是一个完整的解决方案 - ajaxSend
方法实际上是ajaxSend
事件的事件处理程序。它在jQuery中使用.ajax
方法时触发。 See the ajaxSend docs here
上述文档中链接的方法会在您的AJAX请求中附加正确的X-CSRFToken
标头。然后,您可以使用第一种方法发送AJAX请求。