最近、同様の質問を投稿しました。django アプリで $post jquery フォームを使用すると問題が発生します。403 エラーが表示されます。
以前のスレッドで、回答が提供されたので、考えられるエラーを絞り込み、同様の質問があるスレッドを見つけるのに役立ちました。
そのスレッドの作成者は、私と同じ問題を抱えていました。ただし、最も投票された回答は私にとってはうまくいきません。代わりに行うのはこれです:
//Everything works if I add the
//"csrfmiddlewaretoken: '{{ csrf_token }}'"
//in the data sent to the server.
function test_post(){
$.post("/xhr_test/", {
name: "Monty",
food: "Spam",
csrfmiddlewaretoken: '{{ csrf_token }}'
},
function(data) {
alert(data);
}
);
};
動作しますが、送信するすべての文字列に「csrfmiddlewaretoken」を追加する必要があるため、このソリューションは好きではありません。
私はそれがよりエレガントなものだと考えたので、最も投票されたソリューションが私にとってうまくいかない理由を理解したい. つまり、次のコード行を追加します。
$.ajaxSetup({
beforeSend: function(xhr, settings) {
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) {
// Only send the token to relative URLs i.e. locally.
xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
}
}
});
「(!(/^http:.*/.test(settings.url)」の部分で何かする必要があると思います。何かを変更する必要があるかもしれませんが、何がわからないのですか。