我正在尝试抓取一些数据并将其导出为CSV格式。
我不需要CSV部分的帮助,但我遇到的问题是从$ .get()方法中获取变量。
我会使用.done()吗? 。成功()?我不太清楚如何去做。我试过.done()(据我所知),它没有用。
$.get(link, function(response) {
var nohover = $(response).find('#row-nohover').find("a");
var total = "country;avg_temp;high_temp;low_temp;precipitation\n";
for (var i = 0, len = nohover.length; i < len; i++) {
var newLink = nohover[i].getAttribute("href");
newLink = "http://www.domain.com" + newLink;
$.get(newLink, function(response2) {
var countryName = $(response2).find("#left-content").find("#headerfont").text();
countryName = countryName.toLowerCase();
countryName = capitalizeFirstLetter(countryName);
//console.log($(response2).find("tbody:eq(2)").children());
var avgTemp = $(response2).find("tbody:eq(2)").children()[1];
var highTemp = $(response2).find("tbody:eq(2)").children()[2];
var lowTemp = $(response2).find("tbody:eq(2)").children()[3];
var precip = $(response2).find("tbody:eq(2)").children()[4];
avgTemp = $(avgTemp).children()[1].innerHTML;
highTemp = $(highTemp).children()[1].innerHTML;
lowTemp = $(lowTemp).children()[1].innerHTML;
precip = $(precip).children()[1].innerHTML;
total += countryName + ";" + avgTemp + ";" + highTemp + ";" + lowTemp + ";" + precip + "\n";
console.log(total);
});
}
});
基本上我想在循环结束后得到total
变量。我该怎么做?
答案 0 :(得分:1)
你在循环中发出了多个请求。您应该考虑将这些请求存储到某种结构中,以便在所有请求成功完成时通知您。
查看jQuery deferreds .when
函数。
答案 1 :(得分:1)
i
将递增到len - 1
,而不等待您的内部AJAX请求完成。因此,您需要在内部AJAX请求的回调内增加i
以外的变量。
即
for (var i = 0, processed = 0, len = nohover.length; i < len; i++) {
....
$.get(newLink, function(response2) {
....
console.log(total);
processed++;
if(processed === len -1) {
// all done, you can use "total" now
}
});
}