2017-02-06 2 views
0

Я создаю шуточный день mini-app И не могу понять, как сгенерировать новое случайное число каждый день. Случайное число указывает на шутку в json. У меня есть часть случайного числа, работающая, но мне нужна ее только для рандомизации в новый день, а не для каждого обновления браузера.Получайте новое случайное число каждый день в JS или jquery

Вот что я до сих пор

<script> 
      $(document).ready(function() { 
       $.getJSON('js/jokes.json', function (data) { 
        var randomJoke = (Math.floor(Math.random() * data.OneLiners.length)); 
        var newJoke = randomJoke; 
        var decide = (Math.floor(Math.random() * 2)); 
        var jokeofDay = data.OneLiners[newJoke].joke; 
        var riddleofDay = data.Riddles[newJoke].Question; 
        var riddleAnswer = data.Riddles[newJoke].Answer; 
        var riddle = "Question: " + riddleofDay + "<br/> Answer: " + riddleAnswer; 
        if (decide == 0) { 
         document.getElementById("JoD").innerHTML = jokeofDay + " "; 
        } else { 
         document.getElementById("JoD").innerHTML = riddle; 
        } 
       }); 
      }); 

       if(jQuery) console.log('jQuery is loaded.'); 
     </script> 
+0

вам нужно случайное число, которое генерируются один раз в день и сохраняется, или может ли это будет другое случайное число на каждой загрузке страницы? – edcs

+0

номер должен сохраняться весь день и просто генерировать новый в новый день. – FoffySkrimshaw

ответ

0

Если это нормально для каждого пользователя, чтобы получить свое собственное случайное значение, но для него, чтобы изменить только один раз в день, используйте печенье или .localStorage вспомнить, как долго это с тех пор, как они в последний раз получили новое значение.

В противном случае вам придется реализовать свой собственный генератор случайных чисел. Один встроенный JS не позволяет вам указывать свое собственное «семя».

От MDN:

Реализация выбирает начальное семя в алгоритме генерации случайных чисел; он не может быть выбран или сброшен пользователем.

+0

Ну не имеет значения, если разные пользователи получают разные шутки, если эта шутка сохраняется весь день. Он будет отображаться только на нескольких компьютерах (пока). Это часть проекта на работе. Моя команда разрабатывает приложение, которое отображает такие вещи, как погода, время, цены на акции и другие биты, и я хотел поставить Шутку дня там, как кивок к парню в поддержку, который пишет его на белой доске каждый день. В конце концов, он будет помещен на майку picberry и отображен на большом мониторе в комнате для отдыха. – FoffySkrimshaw

1

Ваш лучший выбор - сохранить значение в cookie с истечением срока действия. Таким образом, вы можете оставить его в браузере, чтобы решить, истек ли идентификатор шутки или нет. Это чистый JS пример того, как вы могли бы сделать это:

// Will return a joke id between the min and max values. Once the joke ID has 
// been generated for the day, it is persisted in a cookie until midnight. 
function getJokeId(minId, maxId) { 
    var jokeId = getCookie('joke'); 

    if (jokeId !== null) { 
    return jokeId; 
    } 

    var expire = new Date(); 
    expire.setHours(23,59,59,0); 

    jokeId = Math.floor(Math.random()*(maxId - minId + 1) + minId); 

    document.cookie = 'joke='+jokeId+';expires='+expire.toGMTString()+';path=/'; 

    return jokeId; 
} 


// Just a helper function for accessing cookies in JS - could be replaced with 
// jQuery plugin or similar if needed. 
function getCookie(name) { 
    var value = "; " + document.cookie; 
    var parts = value.split("; " + name + "="); 

    if (parts.length == 2) { 
    console.log('Found joke ID from cookie'); 
    return parts.pop().split(";").shift(); 
    } 

    console.log('No joke ID found - new one needed'); 
    return null; 
} 

getJokeId(0, 5); 

Вот JS Fiddle в примере коде: https://jsfiddle.net/edcs/0Lpg9ro6/