设置AJAX回调操作的最短等待时间

时间:2012-12-13 06:54:39

标签: javascript jquery jquery-callback

我有一个用HTML构建的应用程序,它使用$ .get()

在一个模态中加载全屏

我有一个加载屏幕,当有人点击图标加载应用时会触发。

我希望在清除和显示应用之前,加载屏幕至少显示2秒。

是否有一种好的,安全的方法来启动运行2000毫秒的计时器,检查由回调填充的变量以查看它是否为空,然后仅在加载变量时才继续执行某个操作?

我知道while循环可以解决问题,但在缓慢的一天加载内容之前可能会循环1000次,这似乎是一种低效的处理方式。

答案

$('#testApp').click(function() {
    var twoSecMin = $.Deferred();
    setTimeout(function () { twoSecMin.resolve(); }, 2000);
    $('#appModal').fadeIn(400);
    $.when($.get("/usm/portal/_layouts/monkeysphere/test.aspx"),twoSecMin).then(function (data) {
        $('#appContainer').html(data[0]);
        $('#appContainer').show();
        $('#appModal').fadeOut(200);
    });
});

2 个答案:

答案 0 :(得分:9)

如果您使用的是最新版本的jQuery(1.5或更高版本),则可以使用固定超时创建$.Deferredresolve

var twoSecMin = $.Deferred();
setTimeout(function () { twoSecMin.resolve(); }, 2000);

另外,保存jqXHR返回的$.get,这是一个扩展的Deferred对象:

var ajaxReq = $.get("/usm/test.aspx", ...);

然后wait for both

$.when(twoSecMin, ajaxReq).then(function (_, res) {
    // ready...

    var data = res[0];
    // ...
});

答案 1 :(得分:1)

您可以使用setTimeout(fn, 2e3)来执行此操作。

如果您的变量为null,则可以使用yourVariable === null