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

标签 jquery ajax django google-chrome-extension

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

相关文章:

javascript - 如何在 AJAX 调用期间删除 JS 变量名称末尾的方括号?

jQuery 悬停图像变化动画

javascript - 为什么 setTimeout() 第一次只运行我的代码一次?

javascript - 根据推荐链接自动选择 Contact form 7 中的字段

jquery验证插件动态规则

javascript - 我的 Ajax 函数发出双重请求

javascript - vue.js 从表单选择中更新不同的模型

python - Django 无法从 django.contrib.auth.views 导入登录信息

php - 使用ajax从php脚本返回成功/失败变量

python - Django的注释框架和CSRF