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);”时,它实际上并没有设置全局对象。您能解释一下原因吗?当您在函数的第一行赋值时。无论如何,如果这是答案,我会删除我的答案。