美文网首页
Django 2.1.7 ajax数组传递和后台接收

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

作者: Devops海洋的渔夫 | 来源:发表于2019-09-18 21:09 被阅读0次

    存在问题

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

    此时,如果在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("提交创建任务失败");
        }
    });
    

    相关文章

      网友评论

          本文标题:Django 2.1.7 ajax数组传递和后台接收

          本文链接:https://www.haomeiwen.com/subject/eefpyctx.html