2017-04-17 107 views
0

我正在尝试使用moment.js和openweatherapi制作一个小应用程序。我正尝试重新加载我的页面,每次'x'时间以便更新。一旦发生这种情况,我的JSON数据闪烁。我以前见过几个类似这样的问题,但我仍然在努力..JSON数据在刷新时闪烁,避免每次都绘制新数据...?

我用

setTimeout(function(){ 
    window.location.reload(1); 
}, 5000); 

这里是我的代码如下所示:

<div id = "data"></div> 
    <ul class = "weatherData"> 
    <li id = "city"></li> 
    <li id = "weatherType"></li> 
    <li id = "fTemp"></li> 
    <li id = "windSpeed"></li> 
    </ul> 
</div> 


<script> 
$(document).ready(function(){ 


    var api = 'http://api.openweathermap.org/data/2.5/weather? 
lat=39.729431&lon=-104.831917&appid=97f35dee6354ab9d2bac7c56a4c4a6fe'; 

    $.getJSON(api, function(data){ 
     var weatherType = data.weather[0].description; 
     var city = data.name; 
     var windSpeed = data.wind.speed; 
     var kTemp = data.main.temp; 
     var fTemp; 
     var cTemp; 

    fTemp = (kTemp*(9/5)-459.67).toFixed(2); 
    cTemp = (kTemp-273).toFixed(2); 

    windSpeed = (2.237*(windSpeed)).toFixed(1); 


$('#city').html(city); 
$('#weatherType').html(weatherType); 
$('#fTemp').html(fTemp + " &#8457;"); 
$('#windSpeed').html(windSpeed + " mph "); 
    }); 
}); 


</script> 

<script> 

var time = moment().format("h:mm"); 
var NowMoment = moment().format('LL'); 
var day = moment().format('dddd'); 

var eDisplayMoment = document.getElementById('displayDate'); 
    eDisplayMoment.innerHTML = NowMoment; 


var eDisplayTime = document.getElementById('displayTime'); 
    eDisplayTime.innerHTML = time; 

document.getElementById('displayDay').innerHTML = day; 



</script> 

有人可以指导我做什么?

+1

'JSON data blinks'?你什么意思? – Dummy

+0

为什么页面需要重新加载才能更新数据? – guest271314

+1

@Johnny Shellabarger:在这里你正在做'window.location.reload()',它实际上模拟浏览器中的“刷新”功能,这就是为什么你在浏览器中看到“闪烁”效果,实际上完整的html页面可能是再次加载。 相反,您应该创建View和ViewModel并更新您的html页面(View)的数据(ViewModel)。你可以阅读关于knockout.js的非常基本的教程,这将在30分钟内完成你的工作。这是非常容易和大量的在线教程可用。 让我知道你是否需要任何指导。 –

回答

0

你只需要将你的代码封装在一个名为getWeather的函数中,然后从你的setInterval中调用它。这将重新运行代码而不是整个页面。

$(document).ready(function() { 


    var api = 'http://api.openweathermap.org/data/2.5/weather?lat = 39.729431 & lon = -104.831917 & appid = 97 f35dee6354ab9d2bac7c56a4c4a6fe '; 

    function getWeather() { 
    $.getJSON(api, function(data) { 
     var weatherType = data.weather[0].description; 
     var city = data.name; 
     var windSpeed = data.wind.speed; 
     var kTemp = data.main.temp; 
     var fTemp; 
     var cTemp; 

     fTemp = (kTemp * (9/5) - 459.67).toFixed(2); 
     cTemp = (kTemp - 273).toFixed(2); 

     windSpeed = (2.237 * (windSpeed)).toFixed(1); 


     $('#city').html(city); 
     $('#weatherType').html(weatherType); 
     $('#fTemp').html(fTemp + " &#8457;"); 
     $('#windSpeed').html(windSpeed + " mph "); 
    }); 
    }; 



    getWeather(); 
    setInterval(getWeather, 5000) 

}); 
+0

这似乎没有工作... –

+0

对不起,打错了最后一行setInterval(getWeather()...应该阅读getWeather没有括号。 – MartinWebb

+0

是不是它已经看到了?我很困惑 –