0

我正在尝试获得类似于http://www.minecraft.net页面的效果,它会自动更新数据库中的销售额,我已经研究了两个月,但没有运气。我有一个 php 文件,它查找数据库中有多少结果并将它们显示为一个数字,工作正常http://tzeale.com/sandbox/stats/pull.php

我想要做的是获得类似 minecraft.net 的效果,它会自动更新而不刷新页面。谁能指导我该怎么做?我不知道还能尝试什么。

谢谢。

4

2 回答 2

2

h 您需要使用 AJAX。

setTimeout,以及对该 pull.php 的 AJAX 调用

如果您使用的是 jQuery,这里有一个很好的例子来说明如何实现您想要的。添加了一个简单的逻辑来查看服务器是否死机,并最终停止。

var failed = 0; 
var limit_failed = 5;
(function updateSales( waitTime ){
   waitTime = waitTime || 1000; // Set to 1 second by default

   setTimeout(function(){
       $.ajax({
           url: 'pull.php',
           success: function( response ){
               // Update something with your response
                alert ("sales are now at: "+ response);
               updateSales(); // Recursion
           },
           error: function(){           
                // Error handling - not necessary
               // If the request failed more then (limit_failed) times, you might want to stop it from checking after (limit_failed) times, 
               // and in the meanwhile icnrease the wait time, so the server has more time to get back online.
               if( ++failed < limit_failed ){
                   waitTime += 1000;
                   updateSales( waitTime );
               }
           }
       });
   }, waitTime);
})();
于 2012-07-04T22:10:35.893 回答
1

您将使用setTimeout和 Ajax。setTimeout 将使用 Ajax 每 1000 毫秒(或您设置它)获取数据以获取数据。

您可以html像这样将显示计数包装起来,例如:

<span id="mycount"></span>

然后你的 jQuery 代码看起来像这样:

 setTimeout(function(){
   $.get("/sandbox/stats/pull.php",function(data){
      $("#mycount").html(data);
   });
 },1000);

1000是一秒,您可以根据需要更改它。我不知道如何让它像那样动画,但是$.get()一旦你检索数据,它就会进入你的函数。http://tzeale.com/此外,由于相同的来源策略,这必须与 Ajax 工作在同一个域上


但是,在查看了 te minecraft.net 站点后,我注意到他们一次将这些数据加载到他们的页面中,而不是每 1 秒获取一次:

<script>
var justLoggedIn = false;
var totalUsers = 33652552;
var paidUsers = 6495707;
var totalUsersRate = 1.2166667;
var paidUsersRate = 0.15;
</script>

然后他们没有得到实时数据。他们只是得到当前的数量,然后继续加 1。

他们使用这个插件使它动画化:http: //timeago.yarp.com/ 并且仍然使用setTimeout()每秒添加 1 个。我认为这不是真正的用户,只是从var totalUsers

于 2012-07-04T22:06:06.113 回答