[英]Django view not getting ajax request
我的模板中有一个脚本试图在 onbuttonclick 事件期间将数据发送到 django 视图。 我的问题是请求似乎没有进入视图。 浏览器控制台正确地看到了所有请求,但是当我调用 request.is_ajax() 时,django 视图甚至没有返回 true。
request.method 返回 GET 而不是 POST,数据为空。 无论请求类型如何,此行为都是持久的。
html
<a onclick="setGetParameter(this)" pid="some_id">Some Text</a>
.js
<script>
var csrftoken = Cookies.get('csrftoken');
function setGetParameter(el){
var stuff = $(el).attr('pid');
$.ajax({
type: 'POST',
headers: { "X-CSRFToken": csrftoken },
url: '/view_url/',
data: {'datatopass': stuff},
success: function(response){
alert(response);
}
});
}
</script>
网址.py
path('view_url/', views.test),
path('', views.home),
视图.py
def test(request):
output = request.is_ajax()
return HttpResponse(output)
在Django 3.1 is_ajax()
方法已弃用。 参见杂项 Django 3.1
所以对于Django >= 3.1你可以这样做:
if request.headers.get('x-requested-with') == 'XMLHttpRequest':
is_ajax = True
else:
is_ajax = False
并确保在 AJAX 请求标头中添加以下行:
"X-Requested-With": "XMLHttpRequest"
我会使用 jQuery click
方法:
<a pid="some_id">Some Text</a>
<script>
var csrftoken = Cookies.get('csrftoken');
function setGetParameter(el){
var stuff = $(el).attr('pid');
$.ajax({
type: 'POST',
headers: { "X-CSRFToken": csrftoken },
url: '/view_url/',
data: {'datatopass': stuff},
success: function(response){
alert(response);
}
});
}
$(document).ready(function(){
$('a[pid]').click(function(){
setGetParameter(this);
});
});
</script>
我也会使用JsonResponse 对象:
from django.http import JsonResponse
def test(request):
output = request.is_ajax()
return JsonResponse({'is_ajax': output})
为了序列化dict
以外的对象,您必须将safe
参数设置为False
:
response = JsonResponse([1, 2, 3], safe=False)
经过几天的撞墙,我选择了 go 不同的实现。 看来我只能在最初发送请求的页面上呈现数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.