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
相关产品推荐
相关产品推荐

