首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果调用jQuery,则等待Ajax

如果调用jQuery,则等待Ajax
EN

Stack Overflow用户
提问于 2012-06-17 17:30:51
回答 2查看 248关注 0票数 1

我有以下代码:

代码语言:javascript
复制
var table = new Array();
function getTableData(year) {
    if (!table.hasOwnProperty(year)) {
        $.ajax({
            ...
            success: function(data) {
                table[year] = data;
            }
        });
    }
}

因此,我希望该函数所做的基本上是检查,如果我以前调用过Ajax-request,如果调用过,就不再调用它,而是返回之前加载的数据。

这就像一个护身符。不起作用的是:

代码语言:javascript
复制
function showTable(year) {
    $('#loadingAnimation').show();
    $('#tableDiv').ajaxComplete(function() {
        // insert data into table
    }
    $('#loadingAnimation').hide();
}

只要之前没有加载过数据(即tableyear还不存在),就会执行ajax请求,当请求完成时,数据就会插入到表中,一切都会正常工作。但是当tableyear确实存在时,我的函数不需要等待任何东西,我得到一个空表和加载动画。

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

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

EN

回答 2

Stack Overflow用户

发布于 2012-06-17 18:49:18

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

代码语言:javascript
复制
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;
        }
    });
}
票数 0
EN

Stack Overflow用户

发布于 2012-06-18 13:41:39

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

代码语言:javascript
复制
// 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);
        },

//...

希望这就是你要找的

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11070284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档