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

Javascript 设置AJAX回调操作的最小等待时间,javascript,jquery,jquery-callback,Javascript,Jquery,Jquery Callback,我有一个内置HTML的应用程序,它在一个带有$.get()的模式中全屏加载 我有一个加载屏幕,当有人点击图标加载应用程序时会触发 我希望加载屏幕在清除并显示应用程序之前至少显示2秒钟 是否有一种好的、安全的方法来启动一个运行2000毫秒的计时器,检查由回调填充的变量是否为null,然后仅在加载该变量时执行某个操作 我知道一个while循环可以做到这一点,但是在缓慢的一天中,在内容加载之前可能会循环1000次,这似乎是一种低效的方式 回答 $('#testApp').click(function(

我有一个内置HTML的应用程序,它在一个带有$.get()的模式中全屏加载

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

我希望加载屏幕在清除并显示应用程序之前至少显示2秒钟

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

我知道一个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);
    });
});

您可以使用
setTimeout(fn,2e3)
来完成此操作


为了测试变量是否为空,可以使用
yourVariable===null

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

var twoSecMin = $.Deferred();
setTimeout(function () { twoSecMin.resolve(); }, 2000);
另外,保存
$返回的
jqXHR
。get
,它是一个扩展的
延迟的
对象:

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


明白了。诀窍是,如果x==false@Wesley您可能想重新设计代码以使用回调。请在编辑中查看上面的“我的代码”,这可能会使问题更清楚。如果已经超过2000次,我想执行回调milliseconds@Wesley您可以将
setTimeout()
移动到您的
$.get()
的回调中吗?我可以,但是$.get本身(理论上)可能需要2000毫秒才能执行,我不想让用户等待的时间过长。一旦回调启动,我只想等待isReady剩余的未使用时间。这看起来很有希望,让我试试看。它会永远停止,这可能是我的错。将发布我当前的代码,并尝试修复它。@Wesley Ah
ajaxReq
不用于回调中的
数据。您希望将其设置为执行请求的
jqXHR
(扩展的
XMLHttpRequest
)对象<代码>var ajaxReq=$.get(“/usm/portal/_layouts/monkeysphere/test.aspx”)。已将此项标记为正确,因为它基本上正常工作。在上面重新发布了我的代码,现在我正在让它工作,但是我得到了太多的数据。如果你不想在这里回答,我会转发,因为这是一个单独的问题。找到了。答案贴在上面
$.when(twoSecMin, ajaxReq).then(function (_, res) {
    // ready...

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