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

Django接收Ajax请求无需返回响应时触发报错如何解决

错误原因

Django框架要求所有视图函数必须返回一个HttpResponse对象,你当前的代码中,AJAX请求的逻辑分支执行完成后没有任何返回值,默认返回None,所以触发了这个报错。

解决方案

只需要给AJAX请求分支添加一个空的成功响应即可,不需要额外逻辑,也不影响你的存储操作。另外注意request.is_ajax()方法在Django 3.1及以上版本已经被废弃,建议替换为手动判断请求头的写法。
修改后的完整代码如下:

# 先导入需要的响应类
from django.http import JsonResponse

def planing(request):   
    # 兼容高版本Django的AJAX判断,替换原有的request.is_ajax()
    if request.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest':
        latitude = request.POST.get('latitude', None)
        longitude = request.POST.get('longitude', None)

        # 存储数据逻辑保持不变
        request.session['latitude'] = latitude
        request.session['longitude'] = longitude
        # 新增响应,返回空的成功状态即可,前端不需要额外处理
        return JsonResponse({"code": 0, "msg": "存储成功"})

    elif request.method == "GET":
        return render(request, "tourist/planing.html")
        
    elif request.method == "POST":
        latitude = request.session.get('latitude')
        longitude = request.session.get('longitude')
        if latitude is not None :
            latitude = float(latitude)
            longitude = float(longitude)
        # 原有后续逻辑保持不变
        # ...
        return render(request, "tourist/map.html")

如果你仍要使用request.is_ajax()的旧写法,仅需要在原AJAX分支最后加一行返回即可:

if request.is_ajax():
    # 原有存储逻辑不变
    # ...
    return JsonResponse({"status": "ok"})

这个返回对前端没有额外影响,就算前端不处理这个返回结果,也不会报错,同时满足了Django框架要求视图必须返回响应的规则。

内容的提问来源于stack exchange,提问作者alireza a

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:36:01