繁体   English   中英

从ajax json响应获取数据时出错

[英]Error in getting data from ajax json response

我试图从ajax的JSON响应中获取数据,当我尝试从循环外获取数据时没有问题(console.log命令起作用),但是当它在内部时却报错

TypeError:无法读取未定义的属性“ TOTALITEM”

console.log命令给出了以上错误。第二个错误也发生在“ orc [i] .NITEM”上,但我不知道为什么。 我还尝试将这些值相加并追加到第二位,但这也没有用。 如果有人能解释为什么发生这种情况,我将非常感激!谢谢!

var obj= JSON.parse(data);
                var orc = obj.DADOS.ORCITENS[0].ITENSORC.LITEM;
                var tamanho = orc.length;
                var total=0;
                $(".lista-orcamento").empty();
                console.log(orc[0].TOTALITEM);
                for(var x = 0; x <= tamanho; x++)
                {
                    console.log(orc[x].TOTALITEM);
                        total+= parseFloat(orc[x].TOTALITEM);

                }
                console.log(total);

                for(var i = 0; i <= tamanho; i++)
                {
                    $(".lista-orcamento").append
                        ('<div class="row produtos" >'+
                            '<div class="col-1">'+orc[i].NITEM+'</div>'+
                             '<div class="col-1"> <input type="text" class="form-control codigo" value='+orc[i].CODPRODUTO+'></div>'+
                             '<div class="col-1"> <input type="text" class="form-control quantidade" value='+orc[i].QTDVENDIDO+'></div>'+
                             '<div class="col-3"> <input type="text" class="form-control descricao" value='+orc[i].DESCRICAO+'></div>'+
                             '<div class="col-1">'+
                             '<select  class="form-control prcu">'+
                                '<option value="001">'+orc[i].PRCUNIT+'</option>'+
                             '</select></div>'+
                             '<div class="col-1"> <input type="text" class="form-control prcv" value='+orc[i].PRCVENDA+'></div>'+
                             '<div class="col-1"> <input type="text" class="form-control desco" value='+orc[i].DESCPUNIT+'></div>'+
                             '<div class="col-1"> <input type="text" class="form-control prct" value='+orc[i].TOTALITEM+'></div>'+
                             '<div class="col-1"> <input type="text" class="form-control descot" value='+orc[i].DESCVUNIT+'></div>'+
                             '<div class="col-1"> <input type="text" class="form-control obs" value='+orc[i].OBSITEM+'></div>'+
                          '</div>'
                        );
                }// fim do for

            }//fim sucesso

如果假设您提供的代码在success回调中,则可能类似于:

$.ajax({
  url: "get-orc-data.php",
  data: { id: 0 },
  dataType: "json",
  method: "post",
  success: function(data){
    // Your Code
    var obj = JSON.parse(data);
    var total = 0;
  }
});

在上面的示例中,请记住objtotal将仅针对该函数的范围进行定义。 您不能在该函数之外调用objtotal 如果您需要更新该变量,请创建一个范围更广的舞台。

考虑以下代码:

$(function(){
  var total = 0;
  $.ajax({
    url: "get-orc-data.php",
    data: { id: 0 },
    dataType: "json",
    method: "post",
    success: function(data){
      console.log(data);
      var orc = data.DADOS.ORCITENS[0].ITENSORC.LITEM;
      $(".lista-orcamento").empty();
      console.log("Counting Total: " + total);
      $.each(orc, function(k, v){
        console.log("Adding: " + v.TOTALITEM);
        total += parseFloat(v.TOTALITEM);
      });
      console.log("Total Calculated: " + total);
      $.each(orc, function(k, v){
        $(".lista-orcamento").append(
          '<div class="row produtos" >',
          '<div class="col-1">' + v.NITEM + '</div>',
          '<div class="col-1"> <input type="text" class="form-control codigo" value=' + v.CODPRODUTO + '></div>',
          '<div class="col-1"> <input type="text" class="form-control quantidade" value=' + v.QTDVENDIDO + '></div>',
          '<div class="col-3"> <input type="text" class="form-control descricao" value=' + v.DESCRICAO + '></div>',
          '<div class="col-1">',
          '<select  class="form-control prcu">',
          '<option value="001">' + v.PRCUNIT + '</option>',
          '</select></div>',
          '<div class="col-1"> <input type="text" class="form-control prcv" value=' + v.PRCVENDA + '></div>',
          '<div class="col-1"> <input type="text" class="form-control desco" value=' + v.DESCPUNIT + '></div>',
          '<div class="col-1"> <input type="text" class="form-control prct" value=' + v.TOTALITEM + '></div>',
          '<div class="col-1"> <input type="text" class="form-control descot" value=' + v.DESCVUNIT + '></div>',
          '<div class="col-1"> <input type="text" class="form-control obs" value=' + v.OBSITEM + '></div>'+
          '</div>'
        );
      });
    }
  });
});

现在, total可以用于其他功能。

另外,由于$.ajax()调用已定义了dataType ,因此应该已经有一个JSON对象。 查看控制台应该确认这一点,因为应该有一个与您期望的数据结构一起返回的对象。 如果还有其他问题,您将需要检查代码并确保其与数据结构匹配或检查API。

希望能有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM