2016-03-29 58 views
3

我提出AJAX调用象下面这样:故宫(CSRF令牌丢失或不正确。):

var data_dict = {'user':{{ user.id }}, 'bookId':that.id, 'csrfmiddlewaretoken': '{{ csrf_token }}'}; 
    $.ajax({ 
     type: 'POST', 
     url:"/issuebook", 
     data:data_dict, 
     processData: false, 
     contentType: false, 
     success:function(response) 
     { 
     } 
    }); 

urls.py是:

urlpatterns = [ 
url(r'^$',views.checkLogin,name='checklogin'), 
url(r'^mylibrary/(?P<pk>\d+)/(?P<user_name>[\w\-]+)$',login_required(views.MyLibrary.as_view()),name='mylibrary'), 
url(r'^centrallibrary/(?P<pk>\d+)/(?P<user_name>[\w\-]+)$',login_required(views.CentralLibrary.as_view()),name='centrallibrary'), 
url(r'^issuebook$',login_required(views.IssueBookView.as_view()),name='issuebook'), 

]

我收到“禁(CSRF令牌丢失或不正确。):/ issuebook“ajax调用错误。

在Ajax调用的CSRF令牌越来越呈现为:

var data_dict = {'user':{{ user.id }}, 'bookId':that.id, 'csrfmiddlewaretoken':'fSSdu8dJ4FO6FvDz8eU5ISzOewRYyGbC'}; 
        $.ajax({ 
         type: 'POST', 
         url:"/issuebook", 
         data:data_dict, 
         contentType: false, 
         success:function(response) 
         { 
         } 
        }); 
+0

您刚刚通过字符串''{{csrf_token}}'作为'csrfmiddlewaretoken',并且您的ajax调用无法与相对的匹配。相反,您可以在您的调用函数中从您的html手动获取'csrf'标记的哈希值。 – Kasramvd

+0

也在问题中添加呈现的HTML模板。 – v1k45

+0

@ v1k45我在编辑的问题中添加了呈现的{{csrf_token}}。除此之外,我只是在正常工作的模板中呈现几个字符串值 – ankit

回答

2

此错误是由你的Ajax功能processDatacontentType选项引起的。删除这两个选项将解决问题。

说明:application/x-www-form-urlencoded Content-Type的url编码参数必须被发送到Django的。而如果你设置了processData: false,它将不会编码POST组合,contentType: false将发送一个AJAX POST请求作为text/plain

相关问题