You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中request.is_ajax()返回False,Ajax动态搜索触发页面跳转问题排查

问题排查&解决步骤

1. 修复JS不生效、URL跳转问题

  • 首先确认页面已正确引入jQuery依赖,你的代码使用了jQuery语法,未引入会导致JS直接报错停止执行,可在base.html的</body>标签前添加引入:
<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.4/dist/jquery.min.js"></script>
  • 阻止表单默认提交行为:你当前的搜索输入框放在form标签内,触发提交会直接刷新页面跳转URL,在JS代码中添加以下逻辑:
// 放在所有JS代码最前面即可
$(".form-inline").on('submit', function(e) {
  e.preventDefault();
});
  • 确保JS绑定事件时DOM已加载完成,将你所有的JS代码包裹在DOM就绪回调中:
$(function() {
  // 把你现有的所有JS代码放到这里
});

2. 修复request.is_ajax()返回False问题

Django 3.1及以上版本已经正式移除了request.is_ajax()方法,该方法原本通过判断请求头X-Requested-With是否为XMLHttpRequest识别Ajax请求,现在需要你手动实现判断逻辑:

  • 首先在views.py中添加自定义判断函数:
def is_ajax(request):
    return request.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest'

def index(request):
    # 你原有逻辑不变,把if request.is_ajax(): 替换成
    if is_ajax(request):
        # 原有返回JsonResponse的逻辑不变
  • 同时在JS代码开头添加全局Ajax配置,让所有jQuery请求携带对应的请求头:
$.ajaxSetup({
    headers: { "X-Requested-With": "XMLHttpRequest" }
});

3. 可选优化

如果不想自定义判断函数,也可以直接通过请求的Accept头判断是否需要返回Json数据,把视图中的判断改成:

if request.META.get('HTTP_ACCEPT') == 'application/json':
    # 返回JsonResponse的逻辑

内容的提问来源于stack exchange,提问作者Akram Baklouti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 09:12:03