所以我有以下代码;
<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?
答案 0 :(得分:2)
由于看起来您正在使用Laravel,因此您可以使用内置Broadcast功能来实现它。
您需要创建Event并在表格更新时发送并广播它。
然后您将在您的前端订阅该广播频道,并进行ajax调用以重新加载数据。您还可以仅广播已更改的行,只需将这些行附加到数据集即可。 (请记住,某些广播服务有数据大小限制)
答案 1 :(得分:0)
可能是更好的解决方案,但如果您想在网络浏览器中使用实时数据,则可以使用Websockets。
我建议使用Ratchet库(如果你想使用PHP),但还有一些其他的PHP选择:
如果您了解NodeJS的方法,您还可以使用单独的节点服务器来处理您的websockets:
https://www.npmjs.com/package/nodejs-websocket
我发现节点服务器最容易设置和使用。