Javascript 全局对象返回原始值,即使它已被替换
在初始页面加载时,我创建了一个全局对象。然后使用函数设置其值Javascript 全局对象返回原始值,即使它已被替换,javascript,javascript-objects,Javascript,Javascript Objects,在初始页面加载时,我创建了一个全局对象。然后使用函数设置其值 function set_globals(table){ // Setup Local Storage setLocalStorage(); // DEBUGGING debug = AC.debug; debug == true ? console.log('Debugging is on.') : console.log('Debugging is off.'); // URL
function set_globals(table){
// Setup Local Storage
setLocalStorage();
// DEBUGGING
debug = AC.debug;
debug == true ? console.log('Debugging is on.') : console.log('Debugging is off.');
// URL
current_url = window.location.protocol + "//" + window.location.host + window.location.pathname;
// PAGINATION
page_data = {
"_token": $('meta[name="csrf-token"]').attr('content'),
};
paginate = true;
pagination = {};
setPaginationData(table.pagination, table.config.table.id)
// TABLE
table_restore = true;
// SEARCH
searched = false;
//Downloading
downloadingData = false;
}
功能
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}]
}
当我运行搜索过滤器时。我从AJAX请求返回一个新的分页对象,并使用上面的函数进行设置
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);
});
}
我返回的“数据”对象与页面加载期间的原始对象的结构完全相同,但它是不同的数据
{
"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}]
}
那么,为什么当我运行函数获取下一页数据时,它使用的是对象上设置的原始值,而不是刚从搜索中设置的值
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();
}
}
函数getNextPage(表配置){
debug==true?console.log('获取分页的下一页',table_config,pagination[table_config.table.id]):false;
检查排序(table_config.table.id);
if(分页[table_config.table.id]。当前分页<分页[table_config.table.id]。最后一页){
加载数据(table_config.table.id,true);
var page=pagination[table_config.table.id]。当前_页面+1;
var page_url=addSlash(当前_url)+table_config.table.urls.pagination+'?page='+page;
$.post(页面url、页面数据、函数(数据){
setPaginationData(数据,table_config.table.id);
//分页[table_config.table.id]=数据;
加载数据(table_config.table.id,false);
});
}
}
函数加载数据(表id,检查){
如果(检查==true){
下载数据=真;
$('.'.+表id+''.'加载数据').show();
}否则{
下载数据=假;
$('.'.+表id+''加载数据').hide();
}
}
我的searchTable函数是否应该将我对象中的数据设置为AJAX调用中的新值?在函数getNextPage()中,对服务器进行post调用以检索数据
您已经在函数searchTable()中完成了,在这里您获得了新的分页数据
因此,回到getNextPage()中,传递变量page_data,它是全局的,永远不会更改
在这一部分中,您可能会返回原始分页对象并将其重置。在函数getNextPage()中,对服务器进行post调用以检索数据
您已经在函数searchTable()中完成了,在这里您获得了新的分页数据
因此,回到getNextPage()中,传递变量page_data,它是全局的,永远不会更改
在这一部分中,您可能会返回原始分页对象并将其重置。您确定您使用的表id相同吗?对于@MarioAlexandroSantini的观点:唯一不同的方法是
populateTable
更改它接收的表配置。populateTable
是否可以这样做?@T.J.Crowder不可以。我建议使用堆栈片段(
工具栏按钮)在问题中创建一个可运行的,并使用setTimeout
模拟ajax。你很可能会发现问题,如果你没有,你有一些东西可以证明它,我们可以帮助你。旁注:如果你想使用debug==true?doSomething():false
调试行的样式(我不建议这样做;只需将它放在函数中),您可以通过执行debug==true&&doSomething()来缩短它
你确定你使用的表id是相同的吗?@MarioAlexandroSantini的观点:唯一不同的方法是populateTable
更改它接收的表配置。populateTable
是否可以这样做?@T.J.Crowder不可以。我建议使用堆栈片段(
工具栏按钮)在问题中创建一个可运行的,并使用setTimeout
模拟ajax。你很可能会发现问题,如果你没有,你有一些东西可以证明它,我们可以帮助你。旁注:如果你想使用debug==true?doSomething():false
调试行的样式(我不建议这样做;只需将它放在函数中),您可以通过执行debug==true&&doSomething()来缩短它代码>可能您的问题是页面数据没有更改?页面数据在初始页面加载时设置,在searchTable功能期间重置。另外,在searchTable方法中的AJAX调用期间,我的头显示了正确的头。问题是,在searchTable方法期间,当我运行“setPaginationData(data,table_config.table.id);”时,它实际上并没有设置全局对象。您能解释一下原因吗?当您在函数的第一行赋值时。无论如何,如果这是答案,我将删除我的答案。也许你的问题是页面数据,因为它没有改变?好吧,页面数据在初始页面加载时设置,并在searchTable功能期间重置。另外,在searchTable方法中的AJAX调用期间,我的头显示了正确的头。问题是,在searchTable方法期间,当我运行“setPaginationData(data,table_config.table.id);”时,它实际上并没有设置全局对象。您能解释一下原因吗?当您在函数的第一行赋值时。无论如何,如果这是答案,我会删除我的答案。