5

我有一个内置在 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);
    });
});
4

2 回答 2

9

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

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

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

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

然后等待两者

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

    var data = res[0];
    // ...
});
于 2012-12-13T07:11:38.530 回答
1

您可能只使用 asetTimeout(fn, 2e3)来执行此操作。

要测试您的变量是否为空,您可以使用yourVariable === null.

于 2012-12-13T06:56:23.967 回答