2012-02-14 23 views
7

Sunucuda, hedef zamanlarıyla olayların listesini içeren bir metin dosyası var. Aşağıdaki gibi görünür: ben bir şekilde bir sonraki yaklaşan etkinlik seçmek şimdiki zamana dayalı metin dosyasını okumak ve bir değişkene bu olay için her bir öğeyi atamak yapmanız gereken şeyjavascript ile değişkenleri metin dosyasına okuyun

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

. Örneğin, saat şu anda 2012.02.11-10: 08: 00 ise, javascript değişkenleri time = '2012/02/11-10:10:00'; title = 'EventStop'; color = 'Green'; oluşturulacaktır.

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

Hemen oradan nereye bilmiyorum ya o bile iyi yolu ise başlatmak için:

Ben metin dosyasını okumak mümkün değilim. Metin dosyasının formatı üzerinde kontrolüm var, bu yüzden bir seçenek.

+5

Bu sunucuda yapılmalıdır bir şey gibi görünüyor değiştirmeden müşteriye değil. – gdoron

+0

@gdoron Anlaştık. – rcdmk

+0

@gdoron Aynı fikirdeyim, ancak bu durumda müşteri üzerinde yapılması gerekiyor. – codybuell

cevap

9

Sen dosyanın içeriğini değiştirebilir ki, bu yüzden JSON dönüştürerek (ve tarih/saat ayırarak) öneririz.

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

Sonra bunu ayrıştırmak/almak için getJSON kullanabilirsiniz.

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

Buradan, zamanları okuyabilir ve hangisinin en son olduğunu öğrenebilirsiniz. Yani

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

hep birlikte koyarak: Böyle bir şey çalışması gerekir

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

Awesome ile doğrudan yapabilirsiniz. Metin dosyasını önerilen şekilde JSON olarak yeniden biçimlendirdi ve yukarıdaki komut dosyasını çalıştırabiliyorum. Ancak son kısmı alamıyorum. İlk maçta nasıl durabilirim (basitlik için, şimdiki zaman bu saatten daha azdır) ve her eleman için bir tarih atayın (tarih, saat, başlık, renk)? – codybuell

+0

Eğer false döndürürseniz, '' $ .each' işlevine geçirilirse, döngü duracaktır. Zaman eşleşirse, değişkenleri ayarlayabilir ve 'false; –

+1

Bu hile yaptı. JQuery.ajax ile jQuery.getJSON yerine false olarak ayarlanmış jQuery.ajax kullanmak zorunda kaldım, set değişkenlerinden herhangi birini alamadım (window.varname kullanarak bile ...). – codybuell

0

Zaten zor kısmı yaptığınız gibi görünüyor. Şimdi sadece döndürülen verileri ayrıştırın.

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

Onun zor kısmı veriyi ayrıştırıyor ... – gdoron

+0

Bu özel rotada, fonksiyondan global değişkenleri nasıl oluşturabilirim? Bu fonksiyonda yaratılan değişkenleri çağırmaya çalıştığımda, bunlar tanımlanmamıştır. – codybuell

+0

, Rocket'in cevap yardımını yapıyor mu yoksa hala bir cevaba mı ihtiyacınız var? –

5

metin dosyasını

$.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); 
}); 
İlgili konular