Django中Ajax请求无法向视图传参,QueryDict为空
问题解决:Ajax POST请求后Django后端request.QueryDict为空
问题原因
你设置了contentType:"application/json",将请求体以JSON格式发送,但Django默认只会解析application/x-www-form-urlencoded或multipart/form-data类型的请求到request.POST,JSON格式的数据需要从request.body中读取解析。
解决方案
方案一:修改前端,使用默认表单编码
去掉contentType:"application/json"配置,jQuery会自动以application/x-www-form-urlencoded格式发送数据,这样Django就能把数据解析到request.POST中:
var coin = Number(localStorage.getItem("coin")) if (coin!=0) { $.ajax({ url:"/", method:"POST", headers:{"X-CSRFToken":$("input[name=csrfmiddlewaretoken]").val()}, data:{"coin":coin}, // 移除contentType配置 success:function(data){ console.log(data) localStorage.setItem("coin",0) }, error:function(errMsg){ console.log(errMsg) localStorage.setItem("coin",0) } }) }
此时后端request.POST就能获取到coin数据,控制台会输出你期望的<QueryDict: {"coin": "xxx"}>。
方案二:后端解析JSON数据
如果需要保持JSON格式发送请求,后端需要手动解析request.body:
import json from django.http import JsonResponse elif request.method == "POST": # 解析JSON请求体 data = json.loads(request.body) print(data) # 输出: {"coin": 你发送的数值} response = JsonResponse({"a":"b"},status=200) return response
这种方式下request.POST依然为空,但你可以从解析后的data字典中获取coin值。
内容的提问来源于stack exchange,提问作者user25495429
相关产品推荐
相关产品推荐

