专栏首页Devops专栏Django 2.1.7 ajax数组传递和后台接收

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

存在问题

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

此时,如果在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);

    },
    // 请求出错时调用的函数
    error:function(){
        alert("提交创建任务失败");
    }
});

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • etcd单台部署,启用https以及ca自签名

    Devops海洋的渔夫
  • etcd多台部署,启用https以及ca自签名

    Server81在安装了Server86/87节点后,服务已自动正常

    Devops海洋的渔夫
  • etcd原理以及基本技术概述铺垫

    作为要了解etcd这个数据库,那么第一步就是要知道从哪里去访问官网,再下一步就是如何从官网中获取自己需要的文档资料。

    Devops海洋的渔夫
  • iOS简易蓝牙对战五子棋游戏设计思路之一——核心蓝牙通讯类的设计

        本系列博客将系统的介绍一款蓝牙对战五子棋的开发思路与过程,其中的核心部分有两个,一部分是蓝牙通讯中对战双方信息交互框架的设计与开发,一部分是五子棋游戏中...

    珲少
  • (数据科学学习手札04)Python与R在自定义函数上的异同

    自编函数是几乎每一种编程语言的基础功能,有些时候我们需要解决的问题可能没有完全一致的包中的函数来进行解决,这个时候自编函数就成了一样利器,而Python与R在这...

    Feffery
  • JDK8中LinkedList的工作原理剖析

    我是攻城师
  • Temporal Difference - 时序差分学习

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    Steve Wang
  • Leetcode 20 Valid Parentheses

    Given a string containing just the characters '(', ')', '{', '}', '[' and ']', ...

    triplebee
  • 上来就情感分析?还是先用python去去重吧!

    在做情感分析的时候,有时候需要对文本进行分词,做词频统计。上图是某个店铺的留言数据,对于第26条,只是为了说明“东西很好,很好用!”,但是为了凑字数留言,就写成...

    朱小五
  • 上来就情感分析?还是先用python去去重吧!

    在做情感分析的时候,有时候需要对文本进行分词,做词频统计。上图是某个店铺的留言数据,对于第26条,只是为了说明“东西很好,很好用!”,但是为了凑字数留言,就写成...

    AkShare

扫码关注云+社区

领取腾讯云代金券