【问题标题】:Auto Refresh a Html table every x seconds每 x 秒自动刷新一个 Html 表
【发布时间】:2013-08-21 15:06:41
【问题描述】:

我正在尝试刷新我拥有的表,因为其中的变量会不断更新,我想每隔几秒钟重新更新一次这些变量。我已经通过给表一个 id 并为其创建一个 div 来完成我的代码。该代码将解释我实际上是什么。提前致谢 ! 已编辑:添加了 Var Table 和 Var Refresher。但是代码仍然不会重新加载我的表!有什么想法吗??

Test.php

       <html>
<head>
    <script type='text/javascript'>
 var table = $('#tableID');

// refresh every 5 seconds
var refresher = setInterval(function() {
  table.load("1103242B/processing/js.php");
}, 5000);

setTimeout(function() {
  clearTimeout(refresher);
}, 1800000);
</script>
</head>
<body>
<?php include_once'js.php'; ?>

</body>
</html>

JS.php

<?php
require_once 'connect.php';
include 'start.php';
include 'functions.php';
header("Cache-Control: no-cache,no-store");

$query = "SELECT * FROM opentrades"; //You don't need a ; like you do in SQL
$result = mysql_query($query);
echo "<table border = '1px' id='tableID'>"; // start a table tag in the HTML
echo "<tr><td>" . "Order Number" . "</td><td>" . "Selection" . "</td><td>" . "Date" . "</td><td>" . "Type" . "</td><td>" . "Size" . "</td><td>" . "Bid Price" . "</td><td>" . "Offer Price" . "</td><td>" ."Stop Loss" . "</td><td>" . "Take Profit" . "</td><td>" ."Profit/Loss(USD)"."</td><td>" ."Close"."</td></tr>" ;  //$row['index'] the index here is a field name

while($row = mysql_fetch_assoc($result)){   //Creates a loop to loop through results
if ($row['selection']=='eur/usd')// TO RETRIEVE BID AND OFFER FOR EACH ROW
      {
      $bidpricepl=$bid;

      $offerpricepl=$bid1;

      }
  elseif ($row['selection']=='usd/jpy')
      {
      $bidpricepl=$bid2;

      $offerpricepl=$bid3;

      }
  elseif ($row['selection']=='usd/cad')
      {
      $bidpricepl=$bid4;

      $offerpricepl=$bid5;

      }
  elseif ($row['selection']=='eur/jpy')
      {
      $bidpricepl=$bid6;

      $offerpricepl=$bid7;

      }
  elseif ($row['selection']=='eur/chf')
      {
      $bidpricepl=$bid8;

      $offerpricepl=$bid9;

      }
  elseif ($row['selection']=='gbp/usd')
      {
      $bidpricepl=$bid10;

      $offerpricepl=$bid11;

      }
  elseif ($row['selection']=='aud/usd')
      {
      $bidpricepl=$bid12;

      $offerpricepl=$bid13;

      }
  elseif ($row['selection']=='usd/chf')
      {
      $bidpricepl=$bid14;

      $offerpricepl=$bid15;

      }
  if ($row['type']=="buy")
    {

      $minipipskiller='10';
      $offeropen=$row['offerprice'];
      $pips=$offerpricepl-$offeropen;
      $closedb=$offeropen;
      $pips1=round($pips, 6);
      $pips2 = str_replace('.', '', $pips1);
        if ($pips2<0)
      {
        $pips2 = str_replace('-', '', $pips2);
        $pips2 = ltrim($pips2, '0');
        $pips2 = -1 * abs($pips2);
      }
      else {
        $pips2 = ltrim($pips2, '0');
      }
      $pips3=$pips2/$minipipskiller;
    }// PIP COUNTING
  elseif ($row['type']=="sell")//FOR PIP COUNTING
    {

      $minipipskiller='10';
      $bidopen=$row['bidprice'];
      $pips=$bidopen-$bidpricepl;
      $closedb=$bidopen;
      $pips1=round($pips, 6);
      $pips2 = str_replace('.', '', $pips1);
      if ($pips2<0)
      {
        $pips2 = str_replace('-', '', $pips2);
        $pips2 = ltrim($pips2, '0');
        $pips2 = -1 * abs($pips2);
      }
      else {
        $pips2 = ltrim($pips2, '0');
      }
      $pips3=$pips2/$minipipskiller;
    }



      $ticksize= "0.0001";// FOR PROFIT AND LOSS
      $lot1 = "100000";
      $sizecalc=$row['size'] * $lot1;

        if ($row['type']=="buy")
      { 
        $profitandloss=$sizecalc*$ticksize*$pips3; //per TRADE
      }
      if ($row['type']=="sell")
      {
        $profitandloss=$sizecalc*$ticksize*$pips3; //per TRADE
      }

      $zero= '0';

      if($profitandloss<$zero) {
            $profitText = "<div style=\"color: red;\">$profitandloss</div>";
        } elseif ($profitandloss>$zero) {
            $profitText = "<div style=\"color: green;\">$profitandloss</div>";
        }


$sum+= $profitandloss;


    echo "<tr><td>" . $row['trade_id'] .         
        "</td><td>" . $row['selection'] . 
        "</td><td>" . $row['date'] .
        "</td><td>" . $row['type'] .
        "</td><td>" . $row['size'] .
        "</td><td>" . $row['bidprice'] .
        "</td><td>" . $row['offerprice'] .
        "</td><td>" . $row['stoploss'] .
        "</td><td>" . $row['takeprofit'] .
        "</td><td>" . $profitText . 
        "</td><td><a href ='delete.php?id=".
        $row['trade_id']."'>X</a>
       </td></tr>";  
$profitandloss=0;

if($sum<$zero) {
    $sumText = "<div style=\"color: red;\">$sum</div>";
} elseif ($sum>$zero) {
    $sumText = "<div style=\"color: green;\">$sum</div>";
}
}

echo "</table><br>";



?>

【问题讨论】:

  • setInterval 替换为setTimeout。使用$("table.your-table").load() 并简单地在js.php 上回显表格的内容(!)(所以没有&lt;table&gt; 的东西)
  • 你的错误到底在哪里?什么没有按预期工作?
  • 表格中的动态变量不刷新..
  • 只是猜测:响应可能被浏览器缓存。所以在你的 PHP 中你应该添加: header("Cache-Control: no-cache,no-store")
  • 这里还有很多其他需要改进的地方。返回 HTML 很难看 - 使用 JSON 或 XML 之类的纯数据格式。也许有一天你想编写一个 iOS、Andoid 应用程序或任何其他本地客户端。那么 HTML 表格就没什么用了。如果是 HTML,永远不要直接指定边框或样式 - 使用 css。

标签: php javascript html sql ajax


【解决方案1】:

我认为setIntervaljQuery.load 是你要找的那个

var table = $("#tableID");

// refresh every 5 seconds
var refresher = setInterval(function() {
  table.load("/path/to/js.php");
}, 5000);

或者缩短它

var refresher = setInterval(table.load.bind(table, "/path/to/data"), 5000);

如果您想停止刷新数据,(例如)说用户长时间打开页面

// stop refreshing after 30 minutes
setTimeout(function() {
  clearTimeout(refresher);
}, 1800000);

如果您的数据加载需要一段时间,您可能只想在数据加载后刷新 X 秒。您可以使用setTimeout 来做到这一点

var table = $("#tableID");

var refresh = function() {
  table.load("/path/to/js.php", function() {
    setTimeout(refresh, 5000);
  });
};

refresh();

【讨论】:

  • 是的,/path/to/js.php。它应该按照jQuery.load 的描述返回 HTML。
  • ps。不要在 URL 中使用大写名称。
  • 我已经编辑了代码!但表格仍然没有刷新。我已经检查了动态变量,如果我尝试刷新查看,它们会每秒更新一次!。
  • 感谢您的回复!
【解决方案2】:

只是我的 2 美分,但这似乎是一个不必要的负载来打击你的数据库。 我会考虑像触发器这样的东西,然后写一些更便宜的东西,比如

bool = timestamp > now;
  or
if(myhash != tablehash)

所以您的长轮询只是询问是否有变化而不运行查询

【讨论】:

  • 虽然这不能直接回答所述问题,但它仍然提供了与该问题相关的非常相关和有用的见解。至少它对我有用。谢谢。
【解决方案3】:

改变

$('#tableID').replaceWith($(data)); 

进入

$('#tableID').replaceWith(data);

虽然你所做的事情是将一些东西加载到一个元素中。所以从语义上讲,使用.load() 听起来更好。

$('#tableID').load('some/url/file.php')

【讨论】:

  • 我该怎么做呢?我在哪里插入它? $('#tableID').load('some/url/file.php')
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-11
  • 1970-01-01
  • 2010-12-16
  • 1970-01-01
  • 2013-05-02
  • 2014-06-01
相关资源
最近更新 更多