我试图从ajax的JSON响应中获取数据,当我尝试从循环外获取数据时没有问题(console.log命令起作用),但是当它在内部时却报错< / p>
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
答案 0 :(得分:0)
如果假设您提供的代码在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;
}
});
在上面的示例中,请记住,obj
和total
仅针对该函数的范围进行定义。您不能在该函数之外调用obj
或total
。如果您需要更新该变量,请创建一个范围更广的全局变量。
考虑以下代码:
$(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。
希望有帮助。