Jquery 通过Ajax传递关联数组
我一直在努力理解AJAX,我确实能够发送单个数据片段。但当我尝试发送一个数组时,什么都不会发生。我曾尝试将其格式化为JSON,但在这方面并没有成功。我已经通过各种技巧和窍门的组合搜索过了,这些技巧和窍门几乎让我一路迷路 以下是JS,其中没有获得价格的大部分数学:Jquery 通过Ajax传递关联数组,jquery,arrays,json,ajax,django,Jquery,Arrays,Json,Ajax,Django,我一直在努力理解AJAX,我确实能够发送单个数据片段。但当我尝试发送一个数组时,什么都不会发生。我曾尝试将其格式化为JSON,但在这方面并没有成功。我已经通过各种技巧和窍门的组合搜索过了,这些技巧和窍门几乎让我一路迷路 以下是JS,其中没有获得价格的大部分数学: var data = []; $('[id$="-subtotal"]').each(function () { subtotal = some_math; id = som
var data = [];
$('[id$="-subtotal"]').each(function () {
subtotal = some_math;
id = some_ID_Number;
data['id-' + String(id)] = subtotal
});
$.ajax({
url: '/test/',
type: 'POST',
dataType: "JSON",
data: {
'prices': data,
'csrfmiddlewaretoken': $('input[name="csrfmiddlewaretoken"]').val()
},
success: function (data) {
}
});
我一直在尝试通过以下方式访问阵列:
request.POST.get('prices')
$。each()
。试试这个:
$。每个($('[id$=“-小计“]),函数(键,元素){
小计=一些数学;id=某个id号; 数据['id-'+字符串(id)]=小计 });
数据
声明为对象,而不是数组。数组只能有数字键。对象可以具有包含其他字符的键。如果您console.log(data)
您将看到data
如果是对象将包含数据,如果初始化为数组则为空。所以试试这个:var data={};
$。每个($('*')、函数(){
小计=Math.random()*100;
id=Math.random()*100;
数据['id-'+字符串(id)]=小计
});
控制台日志(数据)代码>
您应该使用json数据而不是数组。您不能将数组传递给AJAX这是不正确的,根据文档()您可以发送一个PlainObject或数组,该对象或数组将由AJAX转换为查询字符串。如果我简单地用data=[1,2,3]
覆盖数组,它会被正确地发送,我可以访问它。我似乎对关联数组有问题,这是我在ajax上面的函数中构建的。我用第二种可能的解决方案更改了上面的答案。也就是说,我确实必须先对其进行JSON字符串化:JSON.stringify(data)
,然后在视图中我只做了以下操作:test\u dict=JSON.loads(request.POST.get('prices'))