我有一个angularjs项目,它从服务器检索JSON文件,并使用内容在屏幕上显示数据。
我使用服务加载数据,此服务每隔2秒调用服务器一个新的JSON文件(为简单起见,我从下面的代码中删除了该文件)。
var data = $resource(:file.json', {}, {
query: {method: 'GET', params: {file: '@file'}}
});
this.load = function(file, myFunction) {
data.query({file:file}, function(data) {
myFunction(data);
}
}
现在,这些文件可能非常大,有时无需处理该文件,因为收到的文件没有任何变化。我在JSON文件中有一个带有版本号的属性,除非该版本号高于上一个文件中的版本号,否则我不应处理该文件。
我可以通过调用查询服务来执行此操作,该服务将文件内容加载到js对象中,然后检查版本,如果文件非常大,则可能需要一段时间来加载它。有没有办法只访问该属性值(版本),然后根据它将文件加载到js对象中?
编辑:我猜测的是,加载一个1MB的JSON文件来检查其中的版本号可能需要一段时间(或者可能没有,并且那个$ resource动作真的很快,任何人都知道?),但我不确定是否可以通过任何其他方式完成,因为我正在检查文件中的特定属性。非常感谢提前。
答案 0 :(得分:0)
您是否可以访问json文件?
我不确定如何生成json文件,但您可以尝试在文件名中添加版本号并检查是否存在较新的文件名。我没有测试过这个,但也许值得一试。
答案 1 :(得分:0)
HTML5和Javascript现在提供了一个File API,可用于逐行读取文件。您可以在此处找到有关此功能的信息:
http://www.html5rocks.com/en/tutorials/file/dndfiles/
这会将整个文件切成字符串,只取第一行(假设版本在那里)
data.substr(0, data.indexOf("\n"));
-
<强>加成:强>
同样在这个答案中,您将了解如何阅读文件的第一行:
https://stackoverflow.com/a/12227851/2552259
var XHR = new XMLHttpRequest();
XHR.open("GET", "http://hunpony.hu/today/changelog-en.txt", true);
XHR.send();
XHR.onload = function (){
console.log( XHR.responseText.slice(0, XHR.responseText.indexOf("\n")) );
};
同一主题的另一个问题:
https://stackoverflow.com/a/6861246/2552259
var txtFile = new XMLHttpRequest();
txtFile.open("GET", "http://website.com/file.txt", true);
txtFile.onreadystatechange = function()
{
if (txtFile.readyState === 4) { // document is ready to parse.
if (txtFile.status === 200) { // file is found
allText = txtFile.responseText;
lines = txtFile.responseText.split("\n");
}
}
}
txtFile.send(null);