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

Ubuntu 17.10下通过AJAX向Django 2.0.3传递JSON数据的技术咨询

针对你的Django AJAX数据提交问题的解决方案

嘿,看你的描述,你刚接触Django正在学习,用Ubuntu 17.10 + Python 3.6 + Django 2.0.3搭建环境,现在要通过AJAX把带输入字段的DataTables表格数据传给视图,还已经处理了无表单场景下的CSRF问题——这个思路很对!我来帮你补全代码并梳理关键细节,确保数据能顺利传递:

1. 补全后的完整AJAX代码

把你没写完的逻辑补全,包含表格数据抓取、CSRF token携带、请求发送全流程:

$(document).ready(function() { 
    var table = $('#example').DataTable(); 

    // 无表单场景下,从cookie中获取CSRF token(Django要求的安全机制)
    function getCookie(name) {
        let cookieValue = null;
        if (document.cookie && document.cookie !== '') {
            const cookies = document.cookie.split(';');
            for (let i = 0; i < cookies.length; i++) {
                const cookie = cookies[i].trim();
                if (cookie.substring(0, name.length + 1) === (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
    const csrftoken = getCookie('csrftoken');

    $('button').click( function() { 
        // 遍历表格所有行,收集输入字段的数据
        var rowData = [];
        table.rows().every(function() {
            var rowElement = this.node();
            // 建议给输入字段设置name属性,对应后端模型字段,方便处理
            var inputs = $(rowElement).find('input');
            var singleRowData = {};
            inputs.each(function() {
                singleRowData[$(this).attr('name')] = $(this).val();
            });
            rowData.push(singleRowData);
        });

        // 发送AJAX请求到Django视图
        $.ajax({
            url: '/submit-table-data/',  // 替换成你在urls.py中配置的视图路径
            type: 'POST',
            headers: {
                'X-CSRFToken': csrftoken  // 把CSRF token放到请求头里
            },
            data: JSON.stringify(rowData),
            contentType: 'application/json',  // 告诉后端请求体是JSON格式
            success: function(response) {
                console.log('数据提交成功!', response);
                // 可以添加成功后的交互,比如清空输入框、提示用户
                alert('数据已成功提交!');
            },
            error: function(xhr, status, err) {
                console.error('提交失败:', err);
                alert('数据提交失败,请查看控制台日志排查');
            }
        });
    });
});

2. 对应Django视图的处理代码

在views.py中编写视图来接收并处理AJAX传来的数据:

from django.http import JsonResponse
import json

def submit_table_data(request):
    # 只处理POST请求
    if request.method == 'POST':
        try:
            # 解析JSON格式的请求体
            data = json.loads(request.body)
            # 这里写你的业务逻辑,比如循环把数据保存到数据库
            # 示例:假设你有个Record模型,字段和输入框name对应
            # from .models import Record
            # for row in data:
            #     Record.objects.create(**row)
            
            return JsonResponse({
                'status': 'success',
                'message': f'成功接收{len(data)}条数据'
            })
        except json.JSONDecodeError:
            return JsonResponse({
                'status': 'error',
                'message': '数据格式错误'
            }, status=400)
    # 非POST请求返回错误
    return JsonResponse({
        'status': 'error',
        'message': '仅支持POST请求'
    }, status=405)

3. 新手必看的关键注意事项

  • 记得在urls.py中配置对应路由:
    from django.urls import path
    from . import views
    
    urlpatterns = [
        # 其他路由...
        path('submit-table-data/', views.submit_table_data, name='submit-table-data'),
    ]
    
  • 表格输入字段一定要设置name属性,最好和Django模型的字段名一致,后端处理会更顺畅
  • 测试时按F12打开浏览器控制台,查看AJAX请求的状态码和返回信息,能快速定位问题
  • 如果你的DataTables是服务器端渲染的,需要调整行数据的获取逻辑(上面代码针对客户端渲染场景)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:29:36