58. 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海洋的渔夫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值