Skycons在按时间间隔调用Forecast.io API时中断

Skycons break when calling Forecast.io API with time interval

本文关键字:io Forecast API 中断 调用 时间 Skycons      更新时间:2023-11-23

我使用带有Skycons的Forecast.io API作为函数中的图标,该函数每n秒调用一次API。

在第二次调用函数时,图标消失。有趣的是,当用硬编码的图标类型设置图标时,它是有效的,我很困惑。我做错了什么?

我的脚本:

var counter = 0;
var skycons = new Skycons({
    "color": "#6c5848"
});
var data;
var apiKey = '6b5c02819a985881e46287c6507a9800';
var lati = 50;
var longi = 25;
var url = 'https://api.forecast.io/forecast/' + apiKey + '/' + lati + ',' + longi + '?callback=?&units=ca';
var callback = function (data) {
    var icon = data.currently.icon;
    var tempC = data.currently.temperature;
    var tempCfeel = data.currently.apparentTemperature;
    // Icon
    skycons.set( 'icon', icon ); // this line doesn't work and breaks the function
    //skycons.set('icon', Skycons.SNOW); // this line works
    // Temperature
    $('#temp').html(tempC.toFixed(1) + ' °C / feels like ' + tempCfeel.toFixed(1) + ' °C');
    counter++;
    $('#counter').html(counter + ' API calls');
};
var fetchForecast = function () {
    $.getJSON(url, callback);
};
fetchForecast();
skycons.play();
setInterval(fetchForecast, 5000);

jsFiddle

试试这个:

    var apiKey = '6b5c02819a985881e46287c6507a9800';
    var lati = 50;
    var longi = 25;
    var url = 'https://api.forecast.io/forecast/' + apiKey + '/' + lati + ',' + longi + '?callback=?&units=ca';
    var fetchForecast = function () {
        var counter = 0;
        var skycons = new Skycons({
            "color": "#6c5848"
        });
        $.getJSON(url, function (data) {
            var icon = data.currently.icon;
            var tempC = data.currently.temperature;
            var tempCfeel = data.currently.apparentTemperature;
            // Icon
            skycons.set( 'icon', icon ); // this line doesn't work
            //skycons.set('icon', Skycons.SNOW); // this line works
            // Temperature
            $('#temp').html(tempC.toFixed(1) + ' °C / feels like ' + tempCfeel.toFixed(1) + ' °C');
            counter++;
            $('#counter').html(counter + ' API calls');

            skycons.play();
        });
    };
    setInterval(function(){

        fetchForecast();
    }, 1000);

计数器被破坏,但检查控制台,其每秒触发一次请求

使用Forecast.io中的字符串时,必须将其括在引号中。当你使用icon来代替partly-cloudy-night时,当你把它传递到sky-cons中时,它必须用引号括起来。希望这是有道理的。

我有同样的问题,我用设置字符串类型的whiter来解决它。

var icon = String(data.currently.icon);