上下文: 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/