使用$ .getJSON循环遍历数组

时间:2016-05-07 23:22:41

标签: javascript jquery json getjson weather-api

我使用for循环来迭代日期数组。此数组将传递给JSON请求。问题是,每次循环时它只会拉动数组中的第一个项目..就像它忽略i或由于某种原因而缓存它。我尝试了两种不同的方法,两者都给了我相同的结果。有什么建议?

第一种方法

for (i = 0; i <= 7; i++) {

    (function(i) { 

    $.getJSON(url + apiKey + "/" + position.coords.latitude + "," + position.coords.longitude + "," + aryDates[i] + "?callback=?", function(data) {
    var listItem = document.createElement("li");

       listItem.className = "js-day-temp";
       $('.js-forecast').append(listItem);
       $('.js-day-temp').html(Math.floor(data.daily.data[0].temperatureMin) + '&#176;');
    });

    })(i);
}

第二种方法

for (i = 0; i <= 7; i++) {

$.ajax({
    url: url + apiKey + "/" + position.coords.latitude + "," + position.coords.longitude + "," + aryDates[i] + "?callback=?",
    async: false,
    dataType: 'json',
    success: function(data) {

    var listItem = document.createElement("li");
    listItem.className = "js-day-temp";
    $('.js-forecast').append(listItem);
    $('.js-day-temp').html(Math.floor(data.daily.data[0].temperatureMin) + '&#176;');
    }
  });

}

这就是我拉日期的方式

function GetDates(startDate, daysToAdd) {
var aryDates = [];
var currentDay = [];

for(var i = 0; i <= daysToAdd; i++) {
   var currentDate = new Date();
  currentDate.setUTCDate(startDate.getUTCDate() + i);
  currentDay.push(DayAsString(currentDate.getUTCDay()));
  // aryDates.push(DayAsString(currentDate.getDay()) + ", " +            
currentDate.getDate() + " " + MonthAsString(currentDate.getMonth()) + " " + currentDate.getFullYear());
  aryDates.push(currentDate.getUTCFullYear() + "-" + MonthAsString(currentDate.getUTCMonth()) + "-" + ("0" + (currentDate.getUTCDate()+1)).slice(-2) + "T12:00:00-0400");
 }

return aryDates;
return currentDay;
 }

 function MonthAsString(monthIndex) {
var d=new Date();
var month=new Array();
month[0]="01";
month[1]="02";
month[2]="03";
month[3]="04";
month[4]="05";
month[5]="06";
month[6]="07";
month[7]="08";
month[8]="09";
month[9]="10";
month[10]="11";
month[11]="12";

return month[monthIndex];
}

function DayAsString(dayIndex) {
var weekdays = new Array(7);
weekdays[0] = "Sunday";
weekdays[1] = "Monday";
weekdays[2] = "Tuesday";
weekdays[3] = "Wednesday";
weekdays[4] = "Thursday";
weekdays[5] = "Friday";
weekdays[6] = "Saturday";

return weekdays[dayIndex];
}

var startDate = new Date();
var aryDates = GetDates(startDate, 7);

1 个答案:

答案 0 :(得分:-1)

想出来!这是我改变了:

$('.js-forecast').append('<li class="js-day-temp ' + 'day-selector' + i + '">' + aryDates[i] + '</li>');
$('.js-day-temp.day-selector' + i).html(Math.floor(data.currently.temperature) + '&#176;');
相关问题