2016-08-25 84 views
3

所以我有这个名为'data.js'的本地文件包含各种数据。如何刷新页面,只要我的js数据文件发生变化

var json={ 
 
    'city': 'madrid', 
 
    'zip':'21212', 
 
    'street':'bergstrasse', 
 
    'house':'15', 
 

 
}; 
 
for(key in json) 
 
{ 
 
    if(json.hasOwnProperty(key)) 
 
    $('input[name='+key+']').val(json[key]); 
 

 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 
 

 
<form action="options.php" method="post" > 
 

 
<input type="text" name="city" placeholder="stadt" > 
 
<br> 
 
<input type="text" name="zip" placeholder="zip" > 
 
<br> 
 
<input type="text" name="street" placeholder="straße" > 
 
<br> 
 
<input type="text" name="house" placeholder="hausnummer" > 
 
<br> 
 
<input type="submit" value="speichern" name="saves"></input> 
 

 

 
</form> 
 

 
    <script src="data.js"></script>

我想刷新我的网页只有在js文件的改变一些数据。感谢你的帮助,如果你能用一点代码解释我的话。我搜索了所有的互联网,我无法找到合适的答案。

+2

步骤1:分离数据和逻辑。第2步:实际上“获取”数据文件(使用'jQuery.get()'或'jQuery.ajax()'。步骤3:比较接收到的数据和之前的数据并决定如何处理它(放弃/更新页) –

+0

@ mpf82是完全正确的,最好的方法可能是在像setInterval()这样的循环中进行AJAX调用,然后比较新数据和旧数据,如果不同,则更新包含div的数据(但不是整个页面imho) 例如,您可以使用redraw()函数来预设data-div元素的HTML内容的更改。 – Aethyn

回答

0

让我们来分析一下。你想:

  • 检查一番定期
  • 要检查的就是一个远程文件
  • 如果它的变化要采取的行动

正如在评论中提到,有很多方法可以在Javascript中完成以上所有内容。

首先,让我们将定期检查的内容:你可以使用一个递归循环setTimeoutsetInterval

function waitOneSecond = function() { 
    setTimeout(function() { 
     check(); // will get to this in a second 
     waitOneSecond(); 
    }, 1000); // 1000 = one second 
}); 

function checkEverySecond() { 
    setInterval(function() { 
     check(); 
    }, 1000); // 1000 = one second 

接下来,我们需要一种方法来检查文件是否改变。实际的“做它改变的部分”取决于你(你可能想考虑使用像Underscore或Lodash的_.isEqual这样的函数),但要做到这一点,你需要获得最新版本的JSON文件。幸运的是jQuery有整整这样做的方法:getJSON

function check() { 
    $.getJson('http://yourserver.com/data.js').done(function(json) { 
     if (didChange(json)) {// use _.isEqual to write your didChange 
      takeAction(); 
     } 
    }); 
} 

正如你可以看到这个最后的例子还包括采取行动,但同样我会离开takeAction函数的定义给你。

相关问题