Jquery 通过Ajax传递关联数组

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

我一直在努力理解AJAX,我确实能够发送单个数据片段。但当我尝试发送一个数组时,什么都不会发生。我曾尝试将其格式化为JSON,但在这方面并没有成功。我已经通过各种技巧和窍门的组合搜索过了,这些技巧和窍门几乎让我一路迷路

以下是JS,其中没有获得价格的大部分数学:

    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'))