2016-08-14 56 views
0

我最初使用以下ajax调用发送POST数据到django rest framework API。django rest框架评论表不发送数据(如何使用角度js发送和接收json数据)

$('#comment_form').on('submit', function(e) { e.preventDefault() 

    $.ajax({ 
    type:"POST", 
    url: '/api/comments/create/', 
    headers:{ 'X-CSRF-Token': getCookie('csrftoken') }, 
    data:$('#post_form').serialize(), 
    error: function(response){ 
     alert('Not authorized.'); // Or something in a message DIV 
    }, 
    success: function(response){ 
    // do something with response 
} 
}); 

}); 

但出于某种原因,我得到404错误,当我使用注释form,尽量POST任何 时的其他形式,如登录formPOSTform工作就好了休息。

(这里是包含注释框http://192.241.153.25:8000/#/post/images2直播网站)

我想它是因为它使用angualr JS的路由功能后加入DOM

它抛出我的典型csrf令牌丢失的错误时,控制台网络选项卡发送csrf正常。

没有人知道任何解决这个问题?

我不知道它是否正常工作,如果我使用AngularJs而不是jQueryajax

+0

有,我能想到的许多问题。首先,遗漏CSRF不应该给你404。第二,当角度改变模板时,jquery的准备好的文档不会再被调用。您需要在控制器的最后手动调用jquery函数或添加相关事件。第三,这根本不会发布,也不会给你404,这看起来很奇怪。所以你需要进一步调查你的代码。我强烈建议你,因为你使用的是角度,而不是使用jquery的ajax,而是使用angular的http或service。 – Wtower

回答

1

正如我当前网页上看到有403错误,造成CSRF保护检查。根据Django的价值观

设置CSRF cookie名称在angularjs config()功能https://docs.djangoproject.com/en/1.10/ref/csrf/#ajax

$httpProvider.defaults.xsrfCookieName = 'csrftoken'; 
$httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';