gpt4 book ai didi

jquery - Django 在 JQuery AJAX 请求上说 is_ajax 为 false

转载 作者:行者123 更新时间:2023-12-03 22:09:50 26 4
gpt4 key购买 nike

上下文: Chrome 浏览器扩展使用 JQuery 请求远程 django 应用程序的响应。 Django 识别出该请求是通过 AJAX 发出的,并以“Hello AJAX!”进行响应。我的锻炼基于this great example 。因为这个请求是从 Chrome 扩展程序发出的,所以请求是跨站点发出的,所以我使用了 @CSRF_exempt我的 Django View 上的装饰器。

问题:我的 Django View 未将该请求识别为 AJAX 请求,而是响应 Hello AJAX!它响应Hello not AJAX!

我的 Django View :
(url/xhr_test使用以下 View )

@csrf_exempt
def check_login_extension(request):
if request.is_ajax():
message = "Hello AJAX!"
else:
message = "Hello not AJAX"
return HttpResponse(message)

我的 JQuery 请求:

function xhrconnect() {
$.get("http://localhost:8000/xhr_test", function(data) {
document.getElementById('xhrmsg').innerHTML = (data);
});
}

最佳答案

通过jQuery来源,看起来像$.ajax()(因此,$.get()$.post(),等等)将自动将crossDomain选项设置为true,以查看您要看到的是交叉的请求, 。在实际的 AJAX 请求中,如果设置了 HTTP_X_REQUESTED_WITH ( relevant code here ),则 jQuery 不会设置 Django 为 is_ajax() 所需的 crossDomain header 。

我认为解决此问题的最简单方法是将 crossDomain 显式设置为 false :

function xhrconnect() {
$.ajax({
url: "http://localhost:8000/xhr_test",
success: function(data) {
document.getElementById('xhrmsg').innerHTML = (data);
},
crossDomain: false
});
}

如果这不起作用,您可以尝试使用 relevant code here 手动设置请求的 HTTP_X_REQUESTED_WITH header 。

关于jquery - Django 在 JQuery AJAX 请求上说 is_ajax 为 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7755899/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com