我有一个内置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);
});
});
如果您使用的是最新版本的 jQuery(1.5 或更高版本),则可以创建一个$.Deferred
并使用固定超时对其进行resolve
:
var twoSecMin = $.Deferred();
setTimeout(function () { twoSecMin.resolve(); }, 2000);
另外,保存 $.get
返回的jqXHR
,这是一个扩展的Deferred
对象:
var ajaxReq = $.get("/usm/test.aspx", ...);
然后等待两者:
$.when(twoSecMin, ajaxReq).then(function (_, res) {
// ready...
var data = res[0];
// ...
});
您可能只使用setTimeout(fn, 2e3)
来执行此操作。
要测试变量是否为空,可以使用yourVariable === null
。