Список JSON отображается как [], даже если содержит объекты? - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь получить список количеств (обозначенных как cantidad), выбранных для каждого продукта (в качестве идентификатора), на мой контроллер колб. Поскольку wtform плохо адаптировался к моим потребностям, мне пришлось использовать json и jquery, но независимо от того, что я делаю, список объектов в контроллере выглядит пустым, даже если во внешнем интерфейсе он что-то есть внутри. Это Javascript:

Эта функция отправляет заказ, который должен быть списком количеств с присвоенным идентификатором:


<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» (заказ), получает все назначенныеколичества и соответствующие им идентификаторы продукта:

  $(".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>

Это отображается в консоли:

Console

И это в контроллере колбы (данные уведомления):

Flask

1 Ответ

0 голосов
/ 31 октября 2019

Проблема была в этой функции, обращая больше внимания на то, что я объявил функцию внутри другой функции, которая выполняется в другом объеме, чем 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);
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...