随机显示的文字

时间:2014-07-10 01:58:42

标签: javascript php jquery sql ajax

我正在为游戏网站制作“天气发生器”。我一直在互联网上搜索几个小时,试图想出最好的方法来做我想做的事情,我似乎无法找到能给我一切的东西。我看过Jquery,AJAX,Javascripts,PHP的混合,html,显示随机div容器,SQL,我研究了很多。

我想做什么:我有一组基于文本的天气描述,我想每24小时随机更改一次。这是一个问题:它必须始终为每个人显示相同的东西。

有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:1)

我的方法是使用一些稳定的数学运算将当前日期转换为您的描述集的索引。它不会真正随意 - 事实上,它将完全是确定性的 - 但除了你之外,它对任何人来说都是随机的。

例如:

var today = new Date();
var weatherIndex = (today.getDate() * today.getMonth() * today.getYear()) % weatherListSize;

javascript中的示例,但您实际上想要在服务器上执行此操作 - 否则,您可能会在任何给定时刻为不同时区的用户获得不同的结果(另外,您真的不会这样做)我希望每次都能发送你所有的天气文本 - 就在今天。)

你提到你已经在使用MySQL了。一个SQL示例将是:

    select text from WeatherTexts
    where ID = 1 + MOD(
        (EXTRACT(DAY FROM CURDATE()) 
        * EXTRACT(MONTH FROM CURDATE()) 
        * EXTRACT(YEAR FROM CURDATE())),
    (select MAX(ID) from WeatherTexts));

假设顺序ID。因为CURDATE()整天保持不变,所以此查询将在给定日期内每次执行(由每个用户)返回完全相同的结果。当它在第二天运行时,结果将(几乎总是)不同。

在PHP中包含查询,以便每次加载页面时都运行该查询。然后在页面中添加一些javascript,类似于How to update your homepage at a certain time?中描述的内容,以确保页面在午夜之后重新加载以获取新内容。记得在计时器中使用服务器时区!如果您希望人们可以将页面打开超过24小时,请记住在上一个计时器到期时启动一个新的(24小时)计时器。

答案 1 :(得分:1)

我这样做的方法是使用一些ajax和服务器端语言(php工作)。

您可以使用ajax和javascript命中服务器,让服务器告诉客户端要绘制的内容。 (让逻辑服务器端确保每个人都能看到同样的事情。)

然后为了保持所有客户端的更新,我会在超时的某个时间(通过setTimeout)调用ajax,如果它应该改变显示的内容,那么基本上每10秒钟会重新询问一次服务器。

javascript看起来像这样(在这里使用jquery)

<script>
    function getDataFromServer() {
        var options = {
            type: "GET", //make a GET http request
            url: "/myServerSidePHPPage", // to the server at this location
            dataType: "json" //make your php page return json
        };
        $.ajax(options).then(function (data) {
            //data will be the json that your php page returns
            //use this data to update your page

            //pretending you have a <div id='weather'> somewhere on your page
            //and also assuming you returned json with a weatherDescription property
            //you could load the text or html into that div like::
            $('#weather').html(data.weatherDescription);
        });
    }

    //this is the jquery onDocumentReady function, it fires when the page loads
    $(function() {
        //tell the page to call the getDataFromServer function every 
        //10 * 1000 milliseconds (10 seconds)
        window.setTimeout(getDataFromServer, 10 * 1000); 
    });
</script>

我不知道php会帮助你解决这个问题,但希望这可以让你开始,一旦你遇到更具体的问题,你可以提出有关这些问题的问题。

至于外观出现的随机性,你可以用几种方式做到这一点。想到的一个简单方法是生成随机的“天气”,并将其存储为文本文件及其生成时间。您的php操作可以读取此文本文件以向客户端提供随机天气,并且还会读取生成时间以查看是否已经过了24小时。如果24小时通过产生新的随机天气。 (您也可以将这些值存储在服务器的内存中)