2012-02-14 47 views
7

我有一个位于服务器上的文本文件,其中包含具有目标时间的事件列表。它看起来像下面这样:使用javascript将文本文件读入变量

2012/02/11-10:00:00 EventStart Red 
2012/02/11-10:10:00 EventStop Green 
... 

我需要做的就是以某种方式读取基于当前时间的文本文件,并选择下一个即将发生的事件,并指定每个元素为该事件给一个变量。例如,如果时间目前为2012.02.11-10:08:00,则会创建javascript变量time = '2012/02/11-10:10:00'; title = 'EventStop'; color = 'Green';

我能够与阅读文本文件:

jQuery.get('schedule.txt',function(data){ 
    alert(data); 
}); 

只是不知道从哪里里去,或者如果这是再好的方式启动。我确实可以控制文本文件的格式,所以修改它是一个选项。

+5

它看起来像一个东西,应该在服务器上完成,而不是客户端。 – gdoron 2012-02-14 21:41:17

+0

@gdoron同意。 – rcdmk 2012-02-14 21:44:04

+0

@gdoron我同意,但在这种特殊情况下,它需要在客户端完成。 – codybuell 2012-02-14 21:48:39

回答

9

你说你可以修改文件的内容,所以我建议将其转换为JSON(和分离的日期/时间)。

[{"date": "2012/02/11", "time": "10:00:00", "title": "EventStart", "color": "Red"}, {"date": "2012/02/11", "time": "10:10:00", "title": "EventStop", "color": "Green"}] 

然后,您可以使用getJSON来获取/解析它。

jQuery.getJSON('schedule.txt',function(data){ 
    // data is an array of objects 
    $.each(data, function(){ 
     console.log(this.title); // log each title 
    }); 
}); 

从这里,你可以阅读时间,并找出哪一个是最新的。像这样的东西应该工作:

if(Date.now() <= Date.parse(this.date+' '+this.time)) 

所以,把他们放在一起:

jQuery.getJSON('schedule.txt',function(data){ 
    var matchedSchedule = {}; 
    // data is an array of objects 
    $.each(data, function(){ 
     if(Date.now() <= Date.parse(this.date+' '+this.time)){ 
      matchedSchedule = this; // If time matches, set a variable to this object 
      return false; // break the loop 
     } 
    }); 
    console.log(matchedSchedule.title); 
    // to set a "global" variable, add it to `window` 
    window.eventTitle = matchedSchedule.title; 
}); 
+1

真棒。按照建议将文本文件重新格式化为JSON,并能够运行上面的脚本。但是我没有得到最后一部分。那么,如何停止第一场比赛(为了简单起见,当前时间少于this.time)并为每个元素(日期,时间,标题,颜色)分配一个变量? – codybuell 2012-02-14 22:47:55

+0

如果你在传递给'$ .each'的函数中返回false;它会停止循环。如果时间匹配,那么你可以设置变量,并返回false;'。 – 2012-02-14 22:49:20

+1

这个技巧。不得不使用jQuery.ajax与async设置为false而不是jQuery.getJSON否则我无法获取任何设置变量(即使使用window.varname ...)。 – codybuell 2012-02-15 03:06:11

0

听起来像你已经做了很难的部分。现在解析返回的数据。

jQuery.get('schedule.txt',function(data){ 
    yourParseFunction(data); 
}); 
+0

他的难点在于解析数据...... – gdoron 2012-02-14 21:47:16

+0

因此,在这个特定的路线中,我将如何从函数创建全局变量?当我尝试调用在该函数内创建的变量时,它们没有被定义。 – codybuell 2012-02-14 21:51:19

+0

@ Rocket的回答有帮助还是你还需要回答? – 2012-02-14 21:56:25

5

而不更改文本文件

$.get('sometext.txt',function(data){ 
    var perLine=data.split('\n'); 
    var myVars=[]; 
    for(i=0;i<perLine.length;i++) 
    { 
    var line=perLine[i].split(' '); 
    myVars[i]={ 
     'time':line[0], 
     'event':line[1], 
     'color':line[2] 
     } 
    } 
    console.log(myVars); 
    console.log(myVars[0].time); 
    console.log(myVars[0].event); 
    console.log(myVars[0].color); 
});