У меня есть два объекта DataTables на странице, которые позволяют называть их поискомРезультатыТаблица и текущий портфолио. Я использую плагин fnReloadAjax, чтобы перезагрузить DataTables по требованию, когда я нажимаю кнопку. Однако только одна из таблиц загружает новые данные (currentPortfolioTable), searchResultsTable выполняет запросы ajax для данных, но не загружает новые (и действительные) данные в таблицу.Две таблицы данных jQuery - попытка перезагрузить, показать/скрыть столбцы и т. Д. - сбой для одной из таблиц данных, но не другой
Я попытался уничтожить DataTable и создать новый и даже переделать части плагина fnReloadAjax, чтобы увидеть, могу ли я произвести другой результат.
Даже если вызывается только fnReloadAjax для currentPortfolioTable, он отказывается отображать новые загруженные данные.
Проблема поискаРезультатыТаблица, не загружающая новые данные, также возникает при отображении/скрытии столбцов с использованием состояния bVisible свойства aoColumns DataTable.
Пример кода:
var dataTableObjects = dataTableObjects || {
"searchResultsTable": {},
"currentPortfolioTable": {}
};
var _rankingsRootUrl = window.ROOT + 'rankings/';
var _defaultDataTableSettings = {
"aoColumns": [
{ "bSortable": false,
"sTitle": "Add to Portfolio",
"bVisible": true
},
{
"bSortable": true,
"sTitle": "Name of Investment",
"bVisible": true
},
{ "bSortable": true,
"sTitle": "Chart",
"bVisible": true
},
{ "bSortable": true,
"sTitle": "Rating",
"bVisible": true
},
{ "bSortable": true,
"sTitle": "Minimum",
"bVisible": true
},
{ "bSortable": true,
"sTitle": "ROR",
"bVisible": false
},
{ "bSortable": true,
"sTitle": "Max DD",
"bVisible": false
},
{ "bSortable": true,
"sTitle": "Sharpe",
"bVisible": false
},
{ "bSortable": true,
"sTitle": "Sterling",
"bVisible": false
}
],
"aaSorting": [
],
"sAjaxSource": _rankingsRootUrl + 'search_results/',
"bServerSide": true,
"bProcessing": true,
"bPaginate": false,
"bLengthChange": false,
"sScrollY": 200,
"sScrollX": "100%",
"sScrollXInner": "100%",
"bScrollCollapse": true,
"fnServerData": function (sSource, aoData, fnCallback) {
$.ajax({
"dataType": 'json',
"type": "POST",
"url": sSource,
"data": aoData,
"success": fnCallback
});
},
"fnServerParams": function (aoData) {
aoData.push(
{"name": "program_type", "value": $(':input#RankingProgramType').val()},
{"name": "program_name", "value": $(':input#RankingProgramName').val()},
{"name": "min_investment", "value": $(':input#RankingMinimumInvestment').val()},
{"name": "rate_of_return", "value": $(':input#RankingRateOfReturn').val()},
{"name": "max_dd", "value": $(':input#RankingMaxDd').val()},
{"name": "time_span", "value": $(':input#RankingTimeSpan').val()},
{"name": "flags", "value": $(':input#RankingFlags').val()},
{"name": "strategies", "value": $(':input#RankingStrategies').val()},
{"name": "recommended", "value": $(':input#RankingRecommended').val()},
{"name": "portfolio_id", "value": (window.PORTFOLIO && window.PORTFOLIO.id) || ""}
);
}
};
var _defaultCurrentPortfolioTableSettings = {
"aoColumns": [
{
"bSortable": true,
"sTitle": "Name of Investment",
"bVisible": true
},
{ "bSortable": true,
"sTitle": "Chart",
"bVisible": true
},
{ "bSortable": true,
"sTitle": "Rating",
"bVisible": true
},
{ "bSortable": true,
"sTitle": "Minimum",
"bVisible": true
},
{ "bSortable": true,
"sTitle": "ROR",
"bVisible": false
},
{ "bSortable": true,
"sTitle": "Max DD",
"bVisible": false
},
{ "bSortable": true,
"sTitle": "Sharpe",
"bVisible": false
},
{ "bSortable": true,
"sTitle": "Sterling",
"bVisible": false
}
],
"aaSorting": [
],
"sAjaxSource": _rankingsRootUrl + 'current_portfolio/',
"bServerSide": true,
"bProcessing": true,
"bPaginate": false,
"bLengthChange": false,
"sScrollY": 200,
"sScrollX": "100%",
"sScrollXInner": "100%",
"bScrollCollapse": true,
"fnServerData": function (sSource, aoData, fnCallback) {
$.ajax({
"dataType": 'json',
"type": "POST",
"url": sSource,
"data": aoData,
"success": fnCallback
});
},
"fnServerParams": function (aoData) {
aoData.push(
{"name": "portfolio_id", "value": (window.PORTFOLIO && window.PORTFOLIO.id) || ""}
);
}
};
dataTableObjects.searchResultsTable = $('#search-results table').dataTable(_defaultDataTableSettings);
dataTableObjects.currentPortfolioTable = $('#currently-in-portfolio table').dataTable(_defaultCurrentPortfolioTableSettings);
$("#rankings").on("click", "a.add", function (e){
dataTableObjects.searchResultsTable.fnReloadAjax('/datable1-url');
dataTableObjects.currentPortfolioTable.fnReloadAjax('/datable2-url');
e.preventDefault();
});
Покушение Исправления:
- Использование метода обратного вызова из fnReloadAjax, чтобы запустить перезагрузку данных для dataTable2
- Проверка, что идентификаторы для каждой таблицы является уникальным
- Проверка того, что dataTableJSObject являются правильными и уникальными таблицами для страницы
- консоль не записывает никаких ошибок или проблем
- JShinted JS, чтобы не гарантировать Js ошибки или ошибки
- Выключено fnReloadAjax dataTableObjects.searchResultsTable и dataTableObjects.currentPortfolioTable еще не перезагружать правильно
- Заменено использованием fnReloadAjax с fnDraw
Что такое ответ AJAX, который вы возвращаете для второй таблицы? Это ожидаемые данные или ошибка сервера? – Jeff
Ожидаемые и действительные данные. –
Единственное, что приходит в голову, это то, что, возможно, ваш селектор ошибочен, или, возможно, на странице есть дубликаты 'id'. – Jeff