我已经写了一些javascript来从API收集数据,然后在响应中迭代几天将它们解析成行(要导出到CSV但是我已经省略了它,因为它正在工作细)。
我的问题是代码可以在大约10天或12天内正常工作,但除此之外它还会提升:
Uncaught TypeError: Cannot read property 'length' of null
在第for (var i = 0; i < items.length; i++) {
行
我认为这与我在需要解析结果时未完成的jquery.get()
调用有关,但我不知道应该如何正确地执行此操作。有人能指出我正确的方向吗?
<!DOCTYPE html>
<html>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
<head>
<title></title>
</head>
<body>
Start:<br>
<input type="text" id="startdate" value="2016-04-12" /><br>
End:<br>
<input type="text" id="enddate" value="2016-04-12" /><br>
<br>
<input type="submit" id="downloadBtn" value="Fetch data"/>
<script>
var startDate;
var endDate;
var fileName;
var headers = ["date","time","obs1", "obs2"]
var rows = [headers];
$("#downloadBtn").click(function() {
startDate = document.getElementById("startdate").value.split("-").join("");
endDate = document.getElementById("enddate").value.split("-").join("");
url = "https://api.example" + startDate + endDate + ".json";
fetchData( url );
});
function fetchData( url ) {
event.preventDefault();
$.get( url, parseRecords );
}
// Extract all data from a query response
function parseRecords(data, status) {
var days = data.historic.days;
for (var i = 0; i < days.length; i++) {
dayRows = formatDay( days[i] );
for (var j= 0; j < dayRows.length; j++) {
rows.push(dayRows[j]);
}
}
}
// Extract row data
function formatDay ( day ) {
var dayRows = [];
var date = day.iso8601.slice(0, 10);
var items = day.items;
// error is raised on the following line, but only for larger responses
for (var i = 0; i < items.length; i++) {
var row = [];
var item = items[i];
row.push([date]);
row.push([item.obs1]);
row.push([item.obs2]);
dayRows.push(row);
}
return dayRows;
}
</script>
</body>
</html>
答案 0 :(得分:0)
我认为您的代码继续正常运行,但每10-12天服务器响应失败。但是,您的代码只期望并处理来自服务器的成功响应 - 因此,如果它返回某种错误,您的代码会在获得正常数据时愉快地插入,但是当它没有预期的输入时会窒息。我建议您在sed 'N;s/\n[0-9]//;s/,/ /2g' file
上链接sed ':a;N;s/^\([0-9][0-9]*\)\(.*\) *\n\1,/\1\2 /;ta;P;D;' file
处理程序。