Почему ответ AJAX не в сортируемой манере
Я использую sorttable.js
для сортировки таблиц, и моя таблица обновляется каждые 3 секунды с помощью ответа ajax, но ответ не отсортирован, как я ожидаю.
Индексная страница
<div id="resDiv">
<table id="myTable1" class="sortable">
<thead>
<tr><th id="person">Person</th><th id="monpay">Monthly pay</th></tr>
</thead>
<tbody>
<tr><td>Jan Molby</td><td>£12,000</td></tr>
<tr><td>Steve Nicol</td><td>£8,500</td></tr>
<tr><td>Steve McMahon</td><td>£9,200</td></tr>
<tr><td>John Barnes</td><td>£15,300</td></tr>
</tbody>
<tfoot>
<tr><td>TOTAL</td><td>£45,000</td></tr>
</tfoot>
</table>
</div>
<a href="#" id="ajax-append">Append new table data</a>
Ответ ajax:
<table id="myTable" class="sortable">
<thead>
<tr><th>Person</th><th>Monthly pay</th></tr>
</thead>
<tbody>
<tr><td>prabha Molby</td><td>£12,000</td></tr>
<tr><td>abcd Nicol</td><td>£8,500</td></tr>
<tr><td>steev McMahon</td><td>£9,200</td></tr>
<tr><td>John Barnes</td><td>£15,300</td></tr>
</tbody>
<tfoot>
<tr><td>TOTAL</td><td>£55,000</td></tr>
</tfoot>
</table>
JavaScript
$(function() {
$("#ajax-append").click(function() {
setInterval(function() {
var request = $.get("assets/replacecontent.jsp", function(html) {
alert(html);
$('#resDiv').html(html);
var newTableObject = document.getElementById("myTable");
alert(newTableObject);
sorttable.makeSortable(newTableObject);
// alert($("#myTable").length);
});
}, 3000);
});
});
Теперь, если когда-нибудь я отсортирую ответ ajax, он будет отсортирован, но после другого ответа он снова изменит свой порядок, но я хочу, чтобы он был отсортирован как предыдущий.
1 ответ
Я думаю, что вы должны были прочитать то, что говорит faq sorttable.js:
Сортировка таблицы при загрузке страницы
Многие люди спрашивают: "Как сделать сортируемую сортировку таблицы при первой загрузке страницы?" Ответ таков: нет. Сортировка - это изменение HTML-кода, который подается с вашего сервера без обновления страницы. Когда страница впервые подается с сервера, вам все равно придется ждать, пока она не будет обработана. Итак, если вы хотите, чтобы таблица сортировалась при первом отображении страницы, обслуживайте таблицу в отсортированном порядке. Таблицы часто выходят из базы данных; получить данные из базы данных в отсортированном порядке с помощью предложения ORDER BY в вашем SQL. Любое решение, которое включает в себя запуск sorttable сразу после загрузки страницы (т. Е. Без ввода данных пользователем), является неправильным решением.
Но они также заявляют решение для этого:
//Find the TH you want to use, maybe you can store that using an event handler before
var myTH = document.getElementsByTagName("th")[0];
//Then sort it
sorttable.innerSortFunction.apply(myTH, []);
Но для этого вам нужно будет найти столбец, по которому щелкнул ваш пользователь ранее, и, честно говоря, я не нашел способа напрямую использовать API для сортировки. Может быть, использовать какой-то обработчик события щелчка и сохранить тот, который был нажат последним.