console.log() 简单 JSON 调用的不当行为
console.log() misbehaviour with simple JSON calls
我初始化数组 historicalData=[0,0,...,0],然后处理几个 JSON 文件并用结果填充数组。 Console.log-ing 数组内容给出 [0,0,...,0]。
但是,如果我从 firebug 控制台 运行 console.log(historicalData),我会得到正确的内容。为什么?
var d = new Date();
var m = d.getMonth();
var y = d.getYear() +1900;
var y2 = y-1;
var historicalData=[0,0,0,0,0,0,0,0,0,0,0,0]; //init step
var counter = 11;
var i;
for (i = m; i!= m || y!=y2; i--) {
if (i==0) {
i=12;
y = y-1;
}
var src = "http://192.168.183.135/incidents/affectedUsersJSON.php?month=".concat(i).concat("&year=").concat(y);;
(function (i,counter,historicalData) {
$.getJSON(src, function funct(data) {
count = Object.keys(data).length;
if (count ==1 ) {
historicalData[counter] = 0 //filling the array
}
else {
historicalData[counter] = count; //filling the array
}
counter = counter-1;
})
}(i,counter,historicalData));
counter = counter-1;
}
</script>
</head>
<body>
<div id="users">Users</div>
<script type="text/javascript">
console.log(historicalData); //console.log-ing the results: I get only ZEROS!
</script>
</body>
</html>
在对控制台的输出感到失望之后,我从控制台本身 运行 "console.log(historicalData)" 并且..我得到了正确的结果。
为什么?
您遇到了时间问题。当您向网站发出 Ajax 调用以更新变量时,网络浏览器尝试加载该页面时会有一点延迟。因此,在加载页面的前几秒,historicalData 仍将全为 0。由于您在页面加载时立即对数据调用 console.log(),因此 Ajax 调用几乎永远不会及时完成。
您在 $.getJSON
调用中编写的函数在 Web 服务器返回结果之前不会执行。因此,如果您需要对 Ajax 调用的结果执行某些操作,请在该函数内执行,以确保您的数据已经存在。
我相信 JSON 电话还没有完全返回。您需要设置回电
.done(function( data ) {
将您的 console.log 调用结果放在此处,您应该会得到预期的结果。
给你参考
我初始化数组 historicalData=[0,0,...,0],然后处理几个 JSON 文件并用结果填充数组。 Console.log-ing 数组内容给出 [0,0,...,0]。 但是,如果我从 firebug 控制台 运行 console.log(historicalData),我会得到正确的内容。为什么?
var d = new Date();
var m = d.getMonth();
var y = d.getYear() +1900;
var y2 = y-1;
var historicalData=[0,0,0,0,0,0,0,0,0,0,0,0]; //init step
var counter = 11;
var i;
for (i = m; i!= m || y!=y2; i--) {
if (i==0) {
i=12;
y = y-1;
}
var src = "http://192.168.183.135/incidents/affectedUsersJSON.php?month=".concat(i).concat("&year=").concat(y);;
(function (i,counter,historicalData) {
$.getJSON(src, function funct(data) {
count = Object.keys(data).length;
if (count ==1 ) {
historicalData[counter] = 0 //filling the array
}
else {
historicalData[counter] = count; //filling the array
}
counter = counter-1;
})
}(i,counter,historicalData));
counter = counter-1;
}
</script>
</head>
<body>
<div id="users">Users</div>
<script type="text/javascript">
console.log(historicalData); //console.log-ing the results: I get only ZEROS!
</script>
</body>
</html>
在对控制台的输出感到失望之后,我从控制台本身 运行 "console.log(historicalData)" 并且..我得到了正确的结果。 为什么?
您遇到了时间问题。当您向网站发出 Ajax 调用以更新变量时,网络浏览器尝试加载该页面时会有一点延迟。因此,在加载页面的前几秒,historicalData 仍将全为 0。由于您在页面加载时立即对数据调用 console.log(),因此 Ajax 调用几乎永远不会及时完成。
您在 $.getJSON
调用中编写的函数在 Web 服务器返回结果之前不会执行。因此,如果您需要对 Ajax 调用的结果执行某些操作,请在该函数内执行,以确保您的数据已经存在。
我相信 JSON 电话还没有完全返回。您需要设置回电
.done(function( data ) {
将您的 console.log 调用结果放在此处,您应该会得到预期的结果。
给你参考