相关文章推荐
怕考试的木耳  ·  软件分享库合集链接汇总推荐_蓝奏云软件分享链 ...·  4 月前    · 
精明的日记本  ·  江西省发布第三批非法集资严重失信人名单 ...·  12 月前    · 
奔放的梨子  ·  Creating Word ...·  1 年前    · 
奔跑的苦咖啡  ·  地藏菩萨本愿经讲记(第十三卷)·  2 年前    · 
愤怒的菠萝  ·  异兽魔都(林田球创作的系列漫画)_搜狗百科·  2 年前    · 
Code  ›  Django 2.1.7 ajax数组传递和后台接收开发者社区
django ajax 数组 后台技术
https://cloud.tencent.com/developer/article/1509778
坚强的机器猫
2 年前
作者头像
Devops海洋的渔夫
0 篇文章

Django 2.1.7 ajax数组传递和后台接收

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > Devops专栏 > Django 2.1.7 ajax数组传递和后台接收

Django 2.1.7 ajax数组传递和后台接收

作者头像
Devops海洋的渔夫
发布 于 2019-09-19 19:14:25
2.1K 0
发布 于 2019-09-19 19:14:25
举报

存在问题

在前端有时候需要传递一个二维数组到后端,但是传递的情况可能会是这样,如下图:

此时,如果在django后端使用 request.POST.get('users_rate') 来获取值,获取到的结果会是 None ,无法获取到结果。

在查询资料的过程中,有人在ajax请求中增加 traditional:true,//防止深度序列化 ,修改请求内容如下:

              // 设置任务信息
                var task_info = {
                    'tag': 'submit', // 提交表单标识
                    'task_name': $('#task_name').val(),
                    'task_priority': $('#task_priority').val(),
                    'service_url': $('#service_url').val(),
                    'run_time': $('#run_time').val(),
                    'expect_slaves': $('#expect_slaves').val(),
                    'users_rate':users_rate,
                // 发送ajax提交表单信息,创建任务
                $.ajax({
                    url: "/tasks_manager/create_task",
                    type: 'POST',
                    headers: {"X-CSRFToken": Cookies.get('csrftoken')},  // 从Cookie取csrf_token,并设置ajax请求头
                    data:task_info,
                    dataType: "json",
                    traditional:true,//防止深度序列化
                    async: false,
                    // 请求成功调用的函数
                    success: function(res){
                        console.log(res);
                    // 请求出错时调用的函数
                    error:function(){
                        alert("提交创建任务失败");
                });

可是这样并不能解决问题,在django后端的确可以接手到了结果,但是获取的值将会是 [object Object] 。 网络请求的Form Data截图如下:

解决问题

前端将要传入的数组进行json格式化

使用 JSON.stringify(users_rate) 对数组进行json序列化。 修改传送数据的格式如下:

此时,再次进行ajax请求,查看网络请求中的Form Data,如下:

在后台通过request.POST.get('users_rate'),获取到一个列表字符串,如下:

            # todo: 获取提交创建任务的form表单信息,创建任务
            if tag == 'submit':
                print("submit")
                # todo:获取任务的基本信息
                users_rate = request.POST.get('users_rate')
                print('users_rate = ', users_rate)

前端完整ajax请求示例

// 获取并发用户数据
users_rate = []; // 并发用户数据
$('.users-rate-list .data-table tbody').find('tr').each(function () {
    users_rate.push({
        'users': $(this).find('.users h5 span').text(),
        'rate': $(this).find('.rate h5 span').text(),
// 设置任务信息
var task_info = {
    'tag': 'submit', // 提交表单标识
    'task_name': $('#task_name').val(),
    'task_priority': $('#task_priority').val(),
    'service_url': $('#service_url').val(),
    'run_time': $('#run_time').val(),
    'expect_slaves': $('#expect_slaves').val(),
    'users_rate':JSON.stringify(users_rate),
// 发送ajax提交表单信息,创建任务
$.ajax({
    url: "/tasks_manager/create_task",
    type: 'POST',
    headers: {"X-CSRFToken": Cookies.get('csrftoken')},  // 从Cookie取csrf_token,并设置ajax请求头
    data:task_info,
    dataType: "json",
    async: false,
    // 请求成功调用的函数
    success: function(res){
        console.log(res);
 
推荐文章
怕考试的木耳  ·  软件分享库合集链接汇总推荐_蓝奏云软件分享链接网站汇总手机 - 骑士助手
4 月前
精明的日记本  ·  江西省发布第三批非法集资严重失信人名单 _ 防范金融风险 _ 南昌县人民政府
12 月前
奔放的梨子  ·  Creating Word Application using Excel VBA: Run-time error '429': ActiveX component can't create obje
1 年前
奔跑的苦咖啡  ·  地藏菩萨本愿经讲记(第十三卷)
2 年前
愤怒的菠萝  ·  异兽魔都(林田球创作的系列漫画)_搜狗百科
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号