Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery在调用时等待Ajax_Jquery_Ajax_Variables_Wait - Fatal编程技术网

jQuery在调用时等待Ajax

jQuery在调用时等待Ajax,jquery,ajax,variables,wait,Jquery,Ajax,Variables,Wait,我有以下代码: var table = new Array(); function getTableData(year) { if (!table.hasOwnProperty(year)) { $.ajax({ ... success: function(data) { table[year] = data; } }); } } 所以,我想让

我有以下代码:

var table = new Array();
function getTableData(year) {
    if (!table.hasOwnProperty(year)) {
        $.ajax({
            ...
            success: function(data) {
                table[year] = data;
            }
        });
    }
}
所以,我想让这个函数做的基本上是检查,如果我以前调用过Ajax请求,如果调用过,就不要再调用它,而是返回以前加载的数据

这很有魅力。不起作用的是:

function showTable(year) {
    $('#loadingAnimation').show();
    $('#tableDiv').ajaxComplete(function() {
        // insert data into table
    }
    $('#loadingAnimation').hide();
}
只要数据在表[year]不存在之前还没有加载,就会执行ajax请求,完成后,将数据插入表中,一切正常。但是当table[year]确实存在时,我的函数就没有什么可等待的了,我得到了一个空白表和加载动画

我以前尝试过的是将ajax请求设置为synchronous,不让我的函数调用ajaxComplete,然后一切都正常,但我根本没有加载动画,在等待期间屏幕只是冻结了

有没有办法让我的剧本发挥作用? 提前感谢:

是否有任何理由认为showTable是一个单独的功能?如中所示,在初始加载后使用单独的按钮刷新表数据

否则,最好将加载动画直接添加到工作代码中,如下所示:

if (!table.hasOwnProperty(year)) {
    $('#loadingAnimation').show(); //start querying for data, display the icon
    $.ajax({
        ...
        success: function(data) {
            $('#loadingAnimation').hide(); //data found, hide icon
            table[year] = data;
        }
    });
}

您可以通过再设置一个变量来存储上一个表[year]。因此,在所有后续调用中,您都会在执行任何其他操作之前检查它。 例如,类似于-


希望这就是您想要的

var table=Array;需要为var table=[];或var table=new Array;。然而,我认为在你的情况下,你想要一个对象,即={}或=新对象谢谢,这是我文章中的一个输入错误。为什么我需要对象而不是数组?它只是一个字符串?…除非年份的值是0..n数组并不是它的最佳选择。some_array[2012]=。。。;将创建0..2011个值未定义的元素。哦,谢谢:>我不知道。@ThiefMaster:您更喜欢使用什么替代方法?是的,我的页面上有箭头按钮,单击该按钮时,将调用showTableyear,并将下一年或上一年作为参数。所以我需要一个单独的函数。
// An example from a dynamic AJAX gallery I had built        
var 
// ...,
prepareMarkup,
loadResults,
resultsCache = {},
// ...
;

loadResults = function(req, category, tracker) {
// I am calling loadResults on every click (navigation in ur case)
// to load galleries
// thus, tracker is different for each link

if (req && req !== "") {
    // I am using a tracker by setting to a link, 
    // which keeps track of those that users have already clicked 
    // at least once
    if (typeof resultsCache[tracker] === "object" 
        && resultsCache[tracker].lookbookResults.length > 0) {
        // Load from cache instead
        buildLookbook(resultsCache[tracker], category);
        return;
    }


    $.ajax({
        type: "GET",
        url: "/bin/content/lookbook",
        data: "lookbook-feed=" + req + "&siteName=" + APP.Site.siteRoot,
        dataType: "json",
        success: function(response) {
            // Set cache
            resultsCache[tracker] = response;

            // Go ahead to build UI
            buildLookbook(response, category);
        },

//...