2016-04-09 30 views
0

İşlevsellik: ilk koşul olarak algılanır ve tatmin edildiğindedurum defalarca tatmin edildiğinde kez ikincil işlevi çağırmak için nasıl

ikincil fonksiyon denir. Bu nedenle '(koşul = doğru)' ise, ikincil işlev çağrılır. Bununla birlikte, ikincil işlev, koşul yanlış olarak değiştirilinceye kadar yalnızca bir kez çağrılmalıdır.

Bu nedenle, doğru davranış şudur: İkincil işlev, başlangıç ​​koşulu hala 'true' olduğunda çağrılmamalıdır, doğru davranış, yalnızca 'condition = true' olduğunda bir kez çağrılması gerektiğidir ve 'koşul = yanlış' olduğunda hiçbir şey olmaz ve bir sonraki durum tekrar 'koşul = doğru' olduğunda, ikincil işlev tekrar koşul olarak bir kez daha koşulsuz olarak çağrılır.

Bu noktada, yaptığım şey, her 'koşul = doğru' olduğunda, her zaman ikincil işlevi =>location.reload();, yani yanlış davranışın gerçekleşmesidir. Bu nedenle, eğer 'condition = true', 10 saniye boyunca doğruyduysa, 10 saniye boyunca her saniye yenilenecektir.

Dolayısıyla, bu noktada, sadece 'location.reload()' yalnızca bir kez çağırmak için nasıl takıldığımda sadece bir defa sayfayı yenileyin edecek şekilde 'koşul = true',.

nedenle, Sen oturumda, Çerez veya localStorage içinde isInterrupt kaydını tutmak zorundadır '= true durum'

var isInterrupt =false; 
//Interval to keep asking the backend for sensor value: Hence, if sensor value returns a '1', it will call the function interrupt() 
    setInterval(getFeedback,100); 

    function getFeedback() 
    { 
     ajax_getArduinoFeedback("flash.do", "formType=getArduinoFeedback"); 
    } 

    //Method call when data from Arduino is "1" 
    function interrupt(){ 

     //location.reload(); 

     if (isInterrupt == false) 
     { 
      isInterrupt = true; 
      //When data="1" at the arduino board, Video will reload and start playing 

      location.reload(); 

     } 
     isInterrupt=false; 
    } 

cevap

0

sadece bir kez algılamak ve zaman bir kez işlevi çağırmak için nasıl yardım/rehberliğine ihtiyacım var.

Senaryonuzun başında böyle gider:

var isInterrupt = localStorage.getItem("isInterrupt"); /* false by default */ 

ve komut değerini değiştirmek kez de localStorage bunu değiştirin:

localStorage.setItem("isInterrupt", "anything"); 

ya da sadece/unset kaldırmak

localStorage.removeItem("isInterrupt"); 

Örnek olarak, bu örnek şöyle gider:

var savedInterrupt = localStorage.getItem("savedInterrupt"); 
setInterval(getFeedback,100); 

function getFeedback() { 
    ajax_getArduinoFeedback("flash.do", "formType=getArduinoFeedback"); 
} 

function interrupt(){ 
    if(isInterrupt != savedInterrupt) { 
     localStorage.setItem("savedInterrupt", isInterrupt); 
     location.reload(); 
    } 
} 

ihtiyaçlarına bağlı olarak, belki sadece bir oturum için son sessionStorage, kullanmak gerekir. Yöntemler her ikisi için de aynıdır.

localStorage saklanan veriler son kullanma kümesi vardır ederken, veri sessionStorage içinde sayfa oturumu

+0

bu hala ben yapmak için o zaman ?? yöntemi geçmesi Ve gerekir mi bittiğinde Temizlenen saklanan condition deyiminde isInterrupt = true bildirmesi gerekiyor? – Luke

+0

Ben lil karıştı, ama nereye set yapın: 'localStorage.setItem ("isInterrupt", "şey");' ve 'localStorage.removeItem ("isInterrupt"); Eğer' isInterrupt set nerede ' – Luke

+0

görmüyorum 'false'e geri dönüyor mu? Tam bir örnek oluşturabilirim. – skobaljic