我最近发布了一个类似的问题。我在我的django应用程序中使用$ post jquery表单时遇到问题。它显示403错误。
在我的previous thread中,提供了答案,我缩小了可能出现的错误,并帮助我找到了一个类似问题的thread。
该主题的作者与我有同样的问题。但是,投票最多的答案并不适用于我。取而代之的是这一个:
//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'));
}
}
});
我认为它必须与&#34;(!(/ ^ http:。* /。test(settings.url)&#34;部分有关。可能必须在那里改变一些东西,但不确定是什么
答案 0 :(得分:0)
首先,确保您的cookie已启用,这是因为在此方法中,csrftoken取自cookie值,而不是模板。
然后,尝试在Chrome开发者控制台中粘贴get_cookie函数的代码,然后尝试使用getCookie('csrftoken')。
如果它以csrftoken返回,那么cookie就在那里。
接下来,您需要确保在那里调用ajaxSetup的代码。在行之前添加debugger
语句,如下所示:
debugger
if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) {
并逐步执行代码以查看它是否正确设置了标头。
在官方文档中尝试一个可能是个好主意。