2015-10-06 11 views
5

Veritabanım var ve web sayfasında görünmesi gereken bir metni, süresini ve süresini saklıyorum. Şimdi istediğimJson tarafından alınan dize öğelerini, görüntülenmeleri gereken tarih ve saate göre nasıl görüntüleyebilirim?

var results =[]; 
var cursor = 0; 

function myFunction() { 
    $.getJSON('list2.php', function(json) { 
     results = json; 
     cursor = 0; 

     // Now start printing 
     printNext(); 
    }); 
} 

function printNext(){ 
    if(cursor == results.length){ 
     // Reset the cursor back to the beginning. 
     cursor = 0; 
    } 

    // Print the key1 in the div. 
    //$('#mydiv').html(results[cursor].key1); 
    $('#mydiv').hide('fast', function(){ $('#mydiv').html(results[cursor].text_content); $('#mydiv').show('fast'); }); 

    // Set a delay for the current item to stay 
    // Delay is key2 * 1000 seconds 
    setTimeout(function(){ 
     printNext(); 
    }, results[cursor].text_duration * 1000); 

    // Advance the cursor. 
    cursor++; 
} 

ve:

{"text_content":"dgsgdsgds","text_duration":"15","start_time":"2015-09-28 23:11:15"},{"text_content":"dgsgdsgds","text_duration":"15","start_time":"2015-09-28 23:11:30"},{"text_content":"gdsgdsgds","text_duration":"15","start_time":"2015-10-01 14:00:00"} 

ben veritabanından veri getirir ve ekranda yazdıran bir jquery komut dosyası var şu şekildedir:

php sonucudur Metnin ekranda görüntülendiği bir özellik eklemek için, yalnızca start_time olarak veritabanından alınan bir tarihte, ancak sunucu koduna daha fazla erişim olmadan yalnızca jquery'de yapılıp yapılamayacağından emin değilim .. Igibi bir ifade ekledi: Yazdιrmadan hemen önce, hile yapmadιğιndan önce, yazdιrmadan hemen önce. Bana yardım edebilir misin? Teşekkürler!

+0

daha iyi DB'den zamana dayalı sadece gerekli verileri getir. @ randomuser1 –

+0

Bunu düşündüm ama her saat için veri alır ve sonra o saatin dakikalarına göre verileri görüntüler tekrarlayan bir sorgu yapmak istiyorum .. – randomuser1

cevap

5

JSON.parse ile json dizgesini çözümler:

var myObj = JSON.parse(results[0]); 

ve karşılaştırmak senin start_time:

if (new Date(myObj.start_time) == new Date()) 

belirli zaman kullanıma setTimeout üzerinde fonksiyonunu çalıştırmak istiyorsanız:

var diff = new Date(myObj.start_time).getTime() - new Date().getTime(); 
setTimeout(function() { 
    $('#mydiv').hide('fast', function() { 
     $('#mydiv').html(results[cursor].text_content); 
     $('#mydiv').show('fast'); 
    }); 
}, diff) 

veya 1000’li bir fonksiyonunuzu çalıştırabilirsiniz. setInterval kullanarak ve clearInterval ile bunu durdurmak tarafından ms:

function check() { 
    if (new Date(myObj.start_time) == new Date()) { 
     $('#mydiv').hide('fast', function() { 
      $('#mydiv').html(results[cursor].text_content); 
      $('#mydiv').show('fast'); 
     }); 
     clearInterval(myInterval); 
    } 
} 

var myInterval = setInterval(check, 1000) 
+0

Teşekkürler @kakajan, ancak bir şey daha - Ben sadece anladım Bu satırı bu satırdan önce kontrol etsem bile: "$ ('# mydiv'). gizle ('hızlı', işlev() {$ ('# mydiv'). html (sonuçlar [imleç] .text_content); $ ('#mydiv') göster ('hızlı');}); 'o zaman sadece bir kez kontrol edilecek ve eğer tarih bir saniye bile farklı ise o zaman metinlerimi ekranda göstermeyeceğim. Bir şekilde, her saniye döngü yapmak ve görüntülenebilecek bir metin olup olmadığını kontrol etmenin bir yolu var mı? – randomuser1

+0

Teşekkürler, cevabınızı gerçekten takdir ediyorum ve ihtiyacım olan şey bu! Sadece bir sorum var - kısaca açıklayabilir misin? Neden yeni Date (myObj.start_time) 'i setTimeout yöntemine (setInterval ile aynı) ikinci bir parametre olarak yerleştiriyorsunuz? Bunun yerine sayısal bir değer olmamalı mı? – randomuser1

+0

setTimeout() yöntemi, bir işlevi çağırır veya belirtilen sayıda milisaniyeden sonra bir ifadeyi değerlendirir. Yani, orada bir hatam var, cevabı güncelledim, şimdiki zamandan zaman farkını hesaplamalıyız. [SetTimeOut] 'un açıklaması aşağıdadır (http://www.w3schools.com/jsref/met_win_settimeout.asp) – kakajan

İlgili konular