【问题标题】:Pass associative array through Ajax通过 Ajax 传递关联数组
【发布时间】:2017-12-01 18:08:11
【问题描述】:

我一直在尝试了解 AJAX,并且我确实设法发送了单条数据。但是当我尝试发送一个数组时,什么都没有。我尝试将其格式化为 JSON,但在这方面并没有真正成功。我已经通过任何提示和技巧组合搜索了stackoverflow,几乎让我一路走来。

这里是没有大部分数学计算的 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')

【问题讨论】:

  • 你应该使用 json 数据而不是数组。您不能将数组传递给 ajax
  • 这是不正确的,根据文档 (api.jquery.com/jquery.ajax),您可以发送一个 PlainObject 或 Array,它会被 AJAX 转换为查询字符串。

标签: jquery arrays json ajax django


【解决方案1】:
  1. 您没有正确使用$.each()。试试这个:

    $.each($('[id$="-subtotal"]'), function (key, element) { 小计 = some_math;
    id = some_ID_Number; 数据['id-' + String(id)] = 小计 });


  1. 您应该将data 声明为对象,而不是数组。数组只能有数字键。一个对象可以有包含其他字符的键。如果你 console.log(data) 你会看到 data 如果它是一个对象,它将包含数据,如果初始化为一个数组,它将是空的。所以试试这个:

  var data = {};

  $.each($('*'), function() {
    subtotal = Math.random() * 100;
    id = Math.random() * 100;
    data['id-' + String(id)] = subtotal
  });

  console.log(data);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

【讨论】:

  • 使用原始代码正确创建了数组,但您的看起来更好。如果我只是用data = [1, 2, 3] 覆盖数组,它会正确发送,我可以访问它。我似乎对关联数组有问题,这是我在 ajax 上方的函数中构建的。
  • 我用第二种可能的解决方案更改了上面的答案。
  • 就是这样,我确实必须先对其进行 JSON 字符串化:JSON.stringify(data) 然后在视图中我只是这样做了:test_dict = json.loads(request.POST.get('prices'))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-09
  • 1970-01-01
  • 1970-01-01
  • 2021-09-21
  • 2012-07-12
相关资源
最近更新 更多