更新当前页面(WebSocket)没有问题.
但是,其他页面没有更新,因此筛选器无法正常工作.
进一步说明
大约有2,000个数据实时更新.
如果所有2000个数据都显示在一个页面上,没有分页,则所有数据都会毫无问题地更新,排序过滤器也会每10秒刷新一次,没有任何问题.
问题是当执行分页时,例如,当每页显示100个数据时,
只更新100个数据,其余数据不更新.因此,排序筛选器无法正常工作.
--js代码
每10秒刷新一次(SetInterval)
数字排序定制(DOM-Text-Numeric)
/* Create an array with the values of all the input boxes in a column, parsed as numbers */
$.fn.dataTable.ext.order['dom-text-numeric'] = function (settings, col) {
return this.api()
.column(col, {order: 'index'})
.nodes()
.map(function (td, i) {
return $(td).text() * 1;
});
};
/* Initialise the table with the required column ordering data types */
$(document).ready(function () {
var myTable = $('#example').DataTable({
responsive: true,
//paging: false,
pageLength:100,
columns: [
null,
{orderDataType: 'dom-text-numeric'},
{orderDataType: 'dom-text-numeric'},
{orderDataType: 'dom-text-numeric'},
],
order: [[1, 'desc']],
});
setInterval(function () {
myTable.rows().invalidate().draw();
}, 10000);
});
HTML--这是一些呈现的数据.
<table id="example" class="table table-striped table-bordered dt-responsive nowrap w-100 dataTable no-footer" style="width: 100%;" aria-describedby="example_info">
<thead>
<tr>
<th class="sorting" tabindex="0" aria-controls="example" rowspan="1" colspan="1" aria-label="Name: activate to sort column ascending" style="width: 442px;">Name</th>
<th class="sorting sorting_desc" tabindex="0" aria-controls="example" rowspan="1" colspan="1" aria-label="premium: activate to sort column ascending" style="width: 282px;" aria-sort="descending">premium</th>
<th class="sorting" tabindex="0" aria-controls="example" rowspan="1" colspan="1" aria-label="binance: activate to sort column ascending" style="width: 292px;">binance</th>
<th class="sorting" tabindex="0" aria-controls="example" rowspan="1" colspan="1" aria-label="upbit: activate to sort column ascending" style="width: 346px;">upbit</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td class="name_DNT-BTC">DNT-BTC</td>
<td class="premium_DNT-BTC sorting_1">1.0087</td>
<td class="binanceSpot_DNTBTC" data-bs-toggle="modal" data-bs-target="#bookModal" onclick="setOrderbookPair(this.className)">0.00000233</td>
<td class="upbitSpot_BTC-DNT" data-bs-toggle="modal" data-bs-target="#bookModal" onclick="setOrderbookPair(this.className)">0.00000231</td>
</tr>
<tr class="even">
<td class="name_SNT-BTC">SNT-BTC</td>
<td class="premium_SNT-BTC sorting_1">1.0072</td>
<td class="binanceSpot_SNTBTC" data-bs-toggle="modal" data-bs-target="#bookModal" onclick="setOrderbookPair(this.className)">0.00000138</td>
<td class="upbitSpot_BTC-SNT" data-bs-toggle="modal" data-bs-target="#bookModal" onclick="setOrderbookPair(this.className)">-</td>
</tr>
<tr class="odd">
<td class="name_TRX-BTC">TRX-BTC</td>
<td class="premium_TRX-BTC sorting_1">1.0067</td>
<td class="binanceSpot_TRXBTC" data-bs-toggle="modal" data-bs-target="#bookModal" onclick="setOrderbookPair(this.className)">0.00000299</td>
<td class="upbitSpot_BTC-TRX" data-bs-toggle="modal" data-bs-target="#bookModal" onclick="setOrderbookPair(this.className)">-</td>
</tr>
<tr class="even">
<td class="name_ETH-USDT">ETH-USDT</td>
<td class="premium_ETH-USDT sorting_1">1.0053</td>
<td class="binanceSpot_ETHUSDT" data-bs-toggle="modal" data-bs-target="#bookModal" onclick="setOrderbookPair(this.className)">1681.08</td>
<td class="upbitSpot_USDT-ETH" data-bs-toggle="modal" data-bs-target="#bookModal" onclick="setOrderbookPair(this.className)">1672.2989054</td>
</tr>
<tr class="odd">
<td class="name_ETH-BTC">ETH-BTC</td>
<td class="premium_ETH-BTC sorting_1">1.0050</td>
<td class="binanceSpot_ETHBTC" data-bs-toggle="modal" data-bs-target="#bookModal" onclick="setOrderbookPair(this.className)">0.073392</td>
<td class="upbitSpot_BTC-ETH" data-bs-toggle="modal" data-bs-target="#bookModal" onclick="setOrderbookPair(this.className)">-</td>
</tr>
<tr class="even">
<td class="name_LINK-BTC">LINK-BTC</td>
<td class="premium_LINK-BTC sorting_1">1.0047</td>
<td class="binanceSpot_LINKBTC" data-bs-toggle="modal" data-bs-target="#bookModal" onclick="setOrderbookPair(this.className)">0.0003658</td>
<td class="upbitSpot_BTC-LINK" data-bs-toggle="modal" data-bs-target="#bookModal" onclick="setOrderbookPair(this.className)">0.00036409</td>
</tr>
<tr class="odd">
<td class="name_LRC-BTC">LRC-BTC</td>
<td class="premium_LRC-BTC sorting_1">1.0047</td>
<td class="binanceSpot_LRCBTC" data-bs-toggle="modal" data-bs-target="#bookModal" onclick="setOrderbookPair(this.className)">0.00001917</td>
<td class="upbitSpot_BTC-LRC" data-bs-toggle="modal" data-bs-target="#bookModal" onclick="setOrderbookPair(this.className)">-</td>
</tr>
<tr class="even">
<td class="name_BNT-BTC">BNT-BTC</td>
<td class="premium_BNT-BTC sorting_1">1.0040</td>
<td class="binanceSpot_BNTBTC" data-bs-toggle="modal" data-bs-target="#bookModal" onclick="setOrderbookPair(this.className)">0.00002527</td>
<td class="upbitSpot_BTC-BNT" data-bs-toggle="modal" data-bs-target="#bookModal" onclick="setOrderbookPair(this.className)">0.00002537</td>
</tr>
<tr class="odd">
<td class="name_EOS-BTC">EOS-BTC</td>
<td class="premium_EOS-BTC sorting_1">1.0025</td>
<td class="binanceSpot_EOSBTC" data-bs-toggle="modal" data-bs-target="#bookModal" onclick="setOrderbookPair(this.className)">0.0000513</td>
<td class="upbitSpot_BTC-EOS" data-bs-toggle="modal" data-bs-target="#bookModal" onclick="setOrderbookPair(this.className)">0.00005143</td>
</tr>
<tr class="even">
<td class="name_XRP-BTC">XRP-BTC</td>
<td class="premium_XRP-BTC sorting_1">1.0025</td>
<td class="binanceSpot_XRPBTC" data-bs-toggle="modal" data-bs-target="#bookModal" onclick="setOrderbookPair(this.className)">0.00001574</td>
<td class="upbitSpot_BTC-XRP" data-bs-toggle="modal" data-bs-target="#bookModal" onclick="setOrderbookPair(this.className)">0.00001578</td>
</tr>
</tbody>
</table>
--js-Socket
从Beckend Consumer接收实时数据(通过On-Message.)
function auto_reconnect_ticker_socket() {
let ws = new WebSocket(
'ws://' + window.location.host +
'/ws/ticker?session_key=${sessionKey}')
ws.onopen = function () {
// subscribe to some channels
ws.send(JSON.stringify({
//.... some message the I must send when I connect ....
}));
};
ws.onmessage = function (e) {
let data = JSON.parse(e.data);
let site = data['site'];
let type = data['type'];
if (type == 'ticker') {
data['data'].forEach((c, i, a) => {
document.querySelector(`.${site}_${c.symbol}`) && update_price(site, c.symbol, c.price_trade)
document.querySelector(`.${site}_${c.symbol}`) && update_premium(c.name, c.premium)
//&& update_price_change_24h(site, c.s, c.o, c.c)
});
}
}
ws.onclose = function (e) {
console.log('Ticker Socket is closed. Reconnect will be attempted in 1 second.', e.reason);
setTimeout(function () {
auto_reconnect_ticker_socket();
}, 1000);
};
ws.onerror = function (err) {
auto_reconnect_ticker_socket.error('Socket encountered error: ', err.message, 'Closing socket');
ws.close();
};
return ws
}
有没有办法用DataTables更新其他页面?