当我尝试在 Django 中使用 ajax 发送 POST 请求时遇到了一些问题。我已经在这里研究了一些主题,但仍然找不到解决它们的方法。
这是我的 javascript 代码,遵循 this solution :
$.ajax({
url: '{% url home %}',
data: {selected_folders: formData,
csrfmiddlewaretoken: '{{ csrf_token }}'},
dataType: "json",
type: "POST",
});
我也试试 solution from Django
$("form").submit(function() {
var csrftoken = $.cookie('csrftoken');
$.ajax({
url: '{% url home %}',
data: {selected_folders: formData,
csrfmiddlewaretoken: csrftoken},
dataType: "json",
type: "POST",
});
});
这是我的view.py
def home(request):
if request.method == 'POST':
Call_Other_Class()
return render_to_response('home.html')
我的目标是将home.html
的POST请求发送给自己,当home.html
收到POST请求后,它会调用其他类做一些事情别的。我不确定在模板中放置 CSRF token 的位置以及我在 view.py
中的代码是否正确。
感谢您的阅读并解决我的问题。
编辑:
我将我的 javascript 代码编辑为:
<script type="text/javascript" charset="utf-8">
$(document).ready(function() {
var csrftoken = Cookies.get('csrftoken');
function csrfSafeMethod(method) {
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajax({
url: '{% url home %}',
data: {selected_folders: formData},
beforeSend: function(xhr, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
},
dataType: "json",
type: "POST",
});
});
</script>
HTML:
<form>
<ul>
<li id='key1'></li>
<li id='key2'></li>
</ul>
</form>
还是不行。
最佳答案
对于 Js:
$("form").submit(function() {
$.ajax({
url: '{% url home %}',
data: {selected_folders: formData,
csrfmiddlewaretoken: $("[name = csrfmiddlewaretoken]"),
dataType: "json",
type: "POST",
});
});
对于view.py:
def home(request):
if request.method == 'POST' and request.is_ajax():
Call_Other_Class()
return render_to_response('home.html')
关于javascript - 在 Django 中使用 ajax POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32217741/