我正在尝试抓取一些数据并将其导出为CSV

时间:2015-05-11 06:05:55

标签: javascript jquery

我正在尝试抓取一些数据并将其导出为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变量。我该怎么做?

2 个答案:

答案 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
        }

    });
}