2016-08-14 30 views
0

私はもともとajaxコールを使用して APIにPOSTデータを送信しました。django restフレームワークコメントフォームデータを送信しない(角度jを使用して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 
} 
}); 

}); 

が、私はコメントformを使用してPOST何でもしようとするとき、ログインformなどの他の形態の残りの部分とPOSTformは仕事だけで罰金、何らかの理由で、私は 、404エラーを得ていました。

私はそれがangualr JSのルーティング機能を使用してDOMに後から追加されますので、それはだ考え出し(ここでコメントボックスhttp://192.241.153.25:8000/#/post/images2がいることを含んでライブサイトです)。

コンソールネットワークタブでcsrfが正常に送信されると、これは通常のcsrfトークンが失われます。

誰でもこの問題の解決策をご存知ですか?

jQueryajaxの代わりにAngularJsを使用するとうまくいくのだろうかと思います。

+0

私は考えることができる多くの問題があります。最初に、CSRFが見つからない場合、404が表示されるはずはありません。第2に、angularがテンプレートを変更したときに、jqueryのドキュメントは再び呼び出されません。コントローラの最後でjquery関数を手動で呼び出すか、関連するイベントを追加する必要があります。第三に、これはまったく投稿していないであろうし、404を与えることはないだろう。これは非常に奇妙なようだ。したがって、コードをさらに調査する必要があります。角度を使用しているので、jqueryのajaxを使用せず、代わりにangleのhttpやサービスを使用するので、強くお勧めします。 – Wtower

答えて

1

現在のページには、csrf保護チェックによる403エラーがあります。 Djangoの値に応じて、あなたのangularjsで

セットCSRFクッキー名config()機能https://docs.djangoproject.com/en/1.10/ref/csrf/#ajax

$httpProvider.defaults.xsrfCookieName = 'csrftoken'; 
$httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken'; 
関連する問題