【问题标题】:JSON list shows as [ ] even if it contains objects?JSON列表即使包含对象也显示为[]?
【发布时间】:2019-10-30 22:37:40
【问题描述】:

我正在尝试将每个产品(作为 id)选择的数量(标识为 cantidad)列表发送到我的烧瓶控制器。由于 wtform 不能很好地适应我的需求,我不得不使用 json 和 jQuery,但无论我做什么,对象列表在控制器中都被视为空,即使在前端它确实有一些东西。 这是 JavaScript:

此函数发布订单,该订单应该是分配了 id 的数量列表:


<script type="text/JavaScript">
  function setPedido(order){
    console.log(order);
    $.ajax({
      url: "{{url_for('main.pedido')}}",
      type: 'POST',
      data: JSON.stringify(order),
      contentType: 'application/json;charset=UTF-8',
      success: function(response) {
        if (response.redirect) {
          window.location.href = response.redirect;
        }
      }
    });
  };

当点击“pedido”(订单)按钮时,获取所有分配的数量及其各自的产品 ID:

  $(".btnPedido").click(function(){
    var order = []

    $(function() {
      var lines = $(".btnAgregar.active")
      for(var i = 0; i < lines.length; i++) {
        console.log(lines[i]);
        order.push({ 
          'id': $(lines[i]).closest("tr").find('.btnPedido').val(), 
          'cantidad' : $(lines[i]).closest("tr").find('.inpCantidad').val()
        });
      }
    });
    setPedido(order);
  });

这将每个输入的数量标记为可以订购:

  $(".btnAgregar").click(function(){
    if($(this).val() == 0){
      $(this).val(1);
      $(this).text("Agregado");
    }else{
      $(this).val(0);
      $(this).text("Agregar");
    }
    $(this).toggleClass('btn-info btn-success active');
  });

</script>

这显示在控制台中:

这在烧瓶控制器中(注意数据):

【问题讨论】:

  • 您是否尝试登录JSON.stringify(order) 来检查它的功能是否符合您的预期?您是否还可以在 Web 浏览器中检查传出请求以查看数据是否在其中?

标签: arrays json ajax flask


【解决方案1】:

问题出在这个函数上,我更加注意我在另一个函数中声明了一个函数,它在与 setPedido(order) 不同的范围内执行,此时它仍然是空的。 更糟糕的是,console.log 里面的内部函数哪里有误导性。

$(".btnPedido").click(function(){
    var order = []

    $(function() {
      var lines = $(".btnAgregar.active")
      for(var i = 0; i < lines.length; i++) {
        console.log(lines[i]);
        order.push({ 
          'id': $(lines[i]).closest("tr").find('.btnPedido').val(), 
          'cantidad' : $(lines[i]).closest("tr").find('.inpCantidad').val()
        });
      }
    });
    setPedido(order);
  });

正确的做法是:

$(".btnPedido").click(function(){
      var order = []
      var lines = $(".btnAgregar.active")
      for(var i = 0; i < lines.length; i++) {
        console.log(lines[i]);
        order.push({ 
          'id': $(lines[i]).closest("tr").find('.btnPedido').val(), 
          'cantidad' : $(lines[i]).closest("tr").find('.inpCantidad').val()
        });
      }
    setPedido(order);
  });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-20
    • 1970-01-01
    相关资源
    最近更新 更多