每当添加新值时,如何刷新某些表?

时间:2018-04-16 20:06:36

标签: php

所以我有以下代码;

<div class="content-inbox">   <h3>{{{ trans('texts.top_buy_orders')}}}</h3><div id="orders-b-list">
    <div id="orders_buy_{{{Session::get('market_id')}}}" class="scrolltable">
      <table class="table table-striped hovered">
        <thead>
          <tr class="header-tb"><th>{{{ trans('texts.price')}}}</th><th>{{{ $coinmain }}}</th><th>{{{ $coinsecond }}}</th></tr>
        </thead>
        <tbody>
          <?php $total_amount=0; $total_value=0; ?>
          @foreach($buy_orders as $buy_order)
           <?php
            $total_amount+= $buy_order->total_from_value;
            $total_value+= $buy_order->total_to_value;
            $price = sprintf('%.8f',$buy_order->price);
            $class_price = str_replace(".", "-", $price);
            $class_price = str_replace(",", "-", $class_price);
           ?>
            <tr id="order-{{$buy_order->id}}" class="order price-{{$class_price}}" onclick="use_price(2,<?php echo $buy_order->price ?>,<?php echo $buy_order->total_from_value ?>)" data-sort="{{sprintf('%.8f',$buy_order->price)}}"><td class="price">{{sprintf('%.8f',$buy_order->price)}}</td><td class="amount">{{{sprintf('%.8f',$buy_order->total_from_value)}}}</td><td class="total">{{{sprintf('%.8f',$buy_order->total_to_value)}}}</td></tr>
          @endforeach
        </tbody>
      </table>
      </div>
  </div>
</div>

此代码的问题在于,如果我网站上的某个人发出订单,则不会自动更新/显示在订单簿中。您需要手动刷新整个页面以查看新订单。

现在我在想这样的事情

<script type="text/javascript">
var auto_refresh = setInterval(function () {
    $('.View').fadeOut('slow', function() {
        $(this).load('/echo/json/', function() {
            $(this).fadeIn('slow');
        });
    });
}, 15000); // refresh every 15000 milliseconds
  </script>

可以为每个人每隔x秒更新一次订单,但这意味着当没有需要/没有新订单添加到订单时它也会刷新。

有没有办法在放置新的购买订单时只刷新div / table,而不是每隔x秒刷新一次div / table?

2 个答案:

答案 0 :(得分:2)

由于看起来您正在使用Laravel,因此您可以使用内置Broadcast功能来实现它。

您需要创建Event并在表格更新时发送并广播它。

然后您将在您的前端订阅该广播频道,并进行ajax调用以重新加载数据。您还可以仅广播已更改的行,只需将这些行附加到数据集即可。 (请记住,某些广播服务有数据大小限制)

答案 1 :(得分:0)

可能是更好的解决方案,但如果您想在网络浏览器中使用实时数据,则可以使用Websockets

我建议使用Ratchet库(如果你想使用PHP),但还有一些其他的PHP选择:

如果您了解NodeJS的方法,您还可以使用单独的节点服务器来处理您的websockets:

https://www.npmjs.com/package/nodejs-websocket

我发现节点服务器最容易设置和使用。