在加载文件内容之前访问JSON属性值

时间:2015-05-18 14:42:04

标签: javascript json angularjs

我有一个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动作真的很快,任何人都知道?),但我不确定是否可以通过任何其他方式完成,因为我正在检查文件中的特定属性。

非常感谢提前。

2 个答案:

答案 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);