1

我有以下代码:

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();
}

只要之前没有加载数据(即 table[year] 还不存在),就会执行 ajax-request,当它完成时,数据被插入到表中,一切正常。但是当 table[year] 确实存在时,我的函数没有任何等待,我得到一个空白表和加载动画。

我之前尝试过将 ajax-request 设置为同步并且不要让我的函数调用“ajaxComplete”,然后一切正常,但我根本没有加载动画,屏幕只是在等待期间冻结。

有什么想法可以让我的脚本工作吗?提前致谢 :)

4

2 回答 2

0

有什么理由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;
        }
    });
}
于 2012-06-17T10:49:17.987 回答
0

您可以尝试通过设置一个变量来存储上一个表[年份]。因此,在您随后的所有调用中,您将在执行任何其他操作之前对其进行检查。例如。就像是 -

// 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);
        },

//...

希望这就是你要找的

于 2012-06-18T05:41:39.253 回答