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

使用AJAX向Django视图POST数据无返回内容问题咨询

解决Django AJAX POST请求无返回数据的问题

嘿,我看了你的代码,发现几个关键问题导致请求没返回预期数据,咱们一步步来梳理修复:

1. 核心问题:没写回调函数接收返回值

你的AJAX请求里完全没有success/done这类回调逻辑——就算后端正常返回了数据,前端也不知道该怎么处理,自然看不到任何结果。这是最直观的问题,先补上:

$.ajax({
  method: "POST",
  url: "http://127.0.0.1:8000/",
  contentType: 'application/json',
  data: JSON.stringify(data_s), // 先改回正确的JSON格式
  // 新增成功回调,打印返回数据
  success: function(response) {
    console.log("服务器返回内容:", response);
    // 这里可以把数据渲染到页面上
  },
  // 新增错误回调,排查问题
  error: function(xhr, status, err) {
    console.error("请求出错:", err);
  }
});

2. JSON请求的格式与后端解析不匹配

你设置了contentType: 'application/json',但当前data传的是普通对象{'QQww': "1"},这不符合JSON请求的要求——必须把数据转成JSON字符串。而且Django后端处理JSON请求时,不能用request.POST获取数据,得从request.body解析:

前端修正

把数据用JSON.stringify()包裹,也就是你之前注释掉的那行:

data: JSON.stringify(data_s),

后端Django视图修正

如果要接收JSON数据,视图得这么写:

import json
from django.http import JsonResponse

def home(request):
    if request.method == 'POST':
        # 解析JSON格式的请求体
        data = json.loads(request.body)
        goal_info = data.get('goal')
        # 这里可以写你的业务逻辑,比如保存到数据库
        # ...
        # 返回JSON格式的响应
        return JsonResponse({
            'status': 'success',
            'message': '目标已处理',
            'received_data': goal_info
        })
    # GET请求的处理逻辑
    return JsonResponse({'status': 'info', 'msg': '这是GET请求'})

3. CSRF令牌的传递更稳妥的方式

你已经获取了CSRF令牌,但发送JSON请求时,Django默认检查的是X-CSRFToken请求头,而不是表单字段。建议把令牌放到请求头里:

function PostGoal(){
 console.log('POSTGOAL!!!')
 const csrfToken = $('input[name="csrfmiddlewaretoken"]').val();
 const data_s = {
  'goal': { 'name':'gg','box':'sasa' }
 }
 $.ajax({
  method: "POST",
  url: "http://127.0.0.1:8000/",
  contentType: 'application/json',
  // 把CSRF令牌放到请求头
  headers: {
    'X-CSRFToken': csrfToken
  },
  data: JSON.stringify(data_s),
  success: function(res) {
    console.log("返回结果:", res);
  },
  error: function(err) {
    console.log("请求失败:", err);
  }
 });
}

4. URL的小优化

硬编码http://127.0.0.1:8000/在本地测试没问题,但部署到生产环境会失效。建议用Django模板标签生成URL:
比如在HTML模板里先定义全局变量:

<script>
const homeUrl = "{% url 'home' %}";
</script>
<script src="你的JS文件路径"></script>

然后在JS里用url: homeUrl,替代硬编码地址。

做完这些修改后,打开浏览器开发者工具(F12)的Network标签,查看请求的状态码、请求头和响应内容,能帮你快速确认问题是否解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:34:21