在初始页面加载时,我创建了一个全局对象。然后使用函数设置其值。
function setPaginationData(data, table_id){
pagination[table_id] = data;
if(pagination[table_id].next_page_url == null){
paginate = false;
}
debug == true ? console.log('Pagination Data', pagination[table_id]) : false;
}
功能。
{
"total":6159,
"per_page":100,
"current_page":2,
"last_page":62,
"next_page_url":"localhost/pagination?page=2",
"prev_page_url":null,
"from":101,
"to":200,
"data":[{REMOVED}]
}
初始页面加载的对象数据如下所示。
function searchTable(table_config){
searched = true;
var search_id = table_config.table.id+'_search';
var search_box = document.getElementById(search_id);
var search = search_box.value;
var table_header = document.getElementById(table_config.table.id + '_head');
var table_headers = table_header.firstElementChild.children;
// Get columns that are searchable
var search_fields = get_searchable(table_headers);
var filters = get_column_filters(table_config);
var post = {
"_token": $('meta[name="csrf-token"]').attr('content'),
"search": search,
"search_fields" : search_fields,
"filters" : filters,
};
debug == true ? console.log('Search:', search, 'Filters:', filters) : false;
dimTable(table_config.table.id);
page_data = post;
var search_url = addSlash(current_url) + table_config.table.urls.search;
$.post(search_url, post, function(data){
debug == true ? console.log('Data returned from search:', data) : false;
clearTableBody(table_config.table.id);
setPaginationData(data, table_config.table.id);
populateTable(data.table, table_config);
getNextPage(table_config);
});
}
当我运行搜索过滤器时。我从AJAX请求返回一个新的分页对象,并使用上面的函数进行设置。
{
"total":186,
"per_page":100,
"current_page":1,
"last_page":2,
"next_page_url":"localhost/search?page=2",
"prev_page_url":null,
"from":1,
"to":100,
"data":[{REMOVED}]
}
我返回的“data”对象与页面加载期间的原始对象完全相同,但它是不同的数据。
function getNextPage(table_config){
debug == true ? console.log('Getting next page of pagination', table_config, pagination[table_config.table.id]) : false;
checkSort(table_config.table.id);
if(pagination[table_config.table.id].current_page < pagination[table_config.table.id].last_page){
loadingData(table_config.table.id, true);
var page = pagination[table_config.table.id].current_page + 1;
var page_url = addSlash(current_url) + table_config.table.urls.pagination + '?page=' + page;
$.post(page_url, page_data, function(data){
setPaginationData(data, table_config.table.id);
// pagination[table_config.table.id] = data;
loadingData(table_config.table.id, false);
});
}
}
function loadingData(table_id, check) {
if(check == true){
downloadingData = true;
$('.'+table_id+'_loading_data').show();
} else {
downloadingData = false;
$('.'+table_id+'_loading_data').hide();
}
}
那么为什么当我运行我的函数来获取下一页数据时,它会使用对象上设置的原始值而不是刚从搜索中设置的值?
fid = fopen('/path/to/file');
line = fgetl(fid);
out = struct();
while ischar(line)
res = regexp(line, '\{([^\}]+)\}','tokens','once'); %// remove {} from line
if isempty(res)
continue; %// empty line?
end
res2 = regexp(res{1},'"([^"]+)"\s*:\s*([^,]+),?', 'tokens'); %// get the key-value pairs
for ii=1:numel(res2)
if isfield(out, res2{ii}{1})
out.(res2{ii}{1}){end+1} = str2double(res2{ii}{2});
else
out.(res2{ii}{1}) = {str2double(res2{ii}{2})};
end
end
line = fgetl(fid);
end
fclose(fid);
我的searchTable函数不应该将我的对象中的数据设置为来自AJAX调用的新值吗?
答案 0 :(得分:0)
在您的函数 getNextPage()中,您对服务器进行调查后检索数据。
您已经在函数 searchTable()中完成了新的分页数据。
回到 getNextPage(),你传递变量 page_data ,这是全局的,永远不会改变。
也许在这部分你会找回原始的分页对象并重置它。